二分查找
看完题目以后感觉无从下手 看了别人的解题思路后 感觉顿时明白了 许多
首先将ab 数组的和整合成一个数组 sab 然后在利用公式sab[i] + c[j] = x;
即sab[i] = x - c[j];然后就进行二分查找
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
int main(){
int l,n,m;
while(cin>>l>>n>>m){
int a[l];
int b[n];
int c[m];
int sab[500 *500];
for(int i =0;i<l;i++){
cin>>a[i];
}
for(int j =0;j<n;j++){
cin>>b[j];
}
for(int k = 0;k<m;k++){
cin>>c[k];
}
int k = 0;
for(int i =0;i<l;i++){
for(int j = 0;j<n;j++){
sab[k++] = a[i] + b[j];
}
}
sort(sab,sab +k);
int s;
cin>>s;
for(int i = 0;i<s;i++){
int x;
cin>>x;
int j;
for( j =0;j<m;j++){
int left = 0;
int right = k-1;
int mid = (left + right)/2;
while(left<=right){
if(sab[mid]>(x - c[j]))
right = mid -1;
else if(sab[mid]<(x-c[j]))
left = mid +1;
else
break;
mid = right /2 + left /2;
}
if(sab[mid]==x-c[j]){
cout<<"YES"<<endl;
break;
}
}
if(j==m)
cout<<"NO"<<endl;
}
}
return 0;
}