文章标题

来源:互联网 发布:云南大学 知乎 编辑:程序博客网 时间:2024/06/07 00:03

二分查找
看完题目以后感觉无从下手 看了别人的解题思路后 感觉顿时明白了 许多
首先将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;}