HDU 2141 Can you find it?
2014-02-08 16:14
260 查看
题解:如果三个数组进行查找会发现是一件很困难的事,那么把题目条件转化一下,将a,b数组相加产生一个和数组,之后再在s数组中查找有没有sum-c[i]即可。
#include <iostream> #include <algorithm> using namespace std; int a[505],b[505],c[505]; int s[250005]; bool find(int x,int l,int r) { if(l>r) return false; int mid=(l+r)/2; if(s[mid]==x) return true; else if(s[mid]>x) return find(x,l,mid-1); else return find(x,mid+1,r); } int main() { int L,n,m; int i,j,k; int t,sum,cnt = 1; while(cin>>L>>n>>m) { for(i=0;i<L;i++)cin>>a[i]; for(i=0;i<n;i++)cin>>b[i]; for(i=0;i<m;i++)cin>>c[i]; for(k=0,i=0;i<L;i++) for(j=0;j<n;j++) s[k++]=a[i]+b[j]; sort(s,s+k); cin>>t; cout<<"Case "<<cnt++<<":\n"; while(t--){ cin>>sum; for(j=0;j<m;j++) if (find(sum-c[j],0,k-1)) break; if(j==m)cout<<"NO\n"; else cout<<"YES\n"; } } return 0; }
相关文章推荐
- hdu 2141 Can you find it? 二分
- hdu 2141 Can you find it?(二分)
- hdu 2141 Can you find it?(二分法)
- HDU-2141 Can you find it? 简单二分
- HDU 2141 Can you find it?(暴力+二分)
- 题解: HDU 2141 Can you find it? (二分查找)
- HDU-2141 Can you find it?
- hdu 2141 Can you find it? 二分查找
- HDU 2141 Can you find it? (二分)
- HDU 2141 Can you find it?(二分)
- [HDU](2141)Can you find it? ---二分查找(查找)
- 二分查找:hdu 2141 Can you find it?
- HDU2141——二分——Can you find it?
- Can you find it? (HDU_2141) 二分查找
- hdu 2141 Can you find it? && hdu1597 find the nth digit
- hdu 2141 Can you find it?
- hdu 2141 Can you find it?
- HDU 2141 Can you find it?(二分)
- HDU 2141 Can you find it?
- HDU 2141 Can you find it?