题解:如果三个数组进行查找会发现是一件很困难的事,那么把题目条件转化一下,将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++<<": "; while(t--){ cin>>sum; for(j=0;j<m;j++) if (find(sum-c[j],0,k-1)) break; if(j==m)cout<<"NO "; else cout<<"YES "; } } return 0; }