Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others)
Total Submission(s): 9180 Accepted Submission(s): 2401
1 #include <iostream>
2 #include <algorithm>
3 using namespace std; 4 int qn; //sab数组总数
5 int sab[250005]; 6 int binsearch(int q[],int n,int k) //二分查找
7 { 8 int left=1,right=n,mid; 9 while(left<=right){ 10 mid = (left+right)/2; 11 if(q[mid]==k) 12 return mid; 13 if(q[mid]>k) 14 right = mid - 1; 15 else
16 left = mid + 1; 17 } 18 return 0; 19 } 20 int main() 21 { 22 int l,n,m; 23 int count = 1; 24 while(cin>>l>>n>>m){ 25 qn = 1; 26 int A[501],B[501],C[501]; 27 for(int i=1;i<=l;i++){ 28 cin>>A[i]; 29 } 30 for(int i=1;i<=n;i++){ 31 cin>>B[i]; 32 } 33 for(int i=1;i<=m;i++){ 34 cin>>C[i]; 35 } 36 for(int i=1;i<=l;i++) 37 for(int j=1;j<=n;j++) 38 sab[qn++] = A[i] + B[j]; //产生sab数列
39 sort(sab+1,sab+qn-1); //对sab数列进行排序
40 int s; 41 cin>>s; 42 cout<<"Case "<<count++<<":"<<endl; 43 while(s--){ 44 int t; 45 cin>>t; 46 int i; 47 for(i=1;i<=m;i++){ 48 int tt = t - C[i]; 49 if(binsearch(sab,qn-1,tt)){ //查找有没有 x-c
50 cout<<"YES"<<endl; 51 break; 52 } 53 } 54 if(i>m) 55 cout<<"NO"<<endl; 56 } 57 } 58 return 0; 59 }
Freecode : www.cnblogs.com/yym2013