hdu 2141

来源:互联网 发布:js鼠标点击触发事件 编辑:程序博客网 时间:2024/06/08 03:53
这道题很好,先是将两个数组合并成一个,然后再二分,我犯了一个错误就是应该对合并后的数组二分,对另一个穷举。
#include<iostream>#include<algorithm>#include<cstdio>using namespace std;int a[600],b[600],c[600],d[360000];int main(){int i,j,k,l,n,s,m,x,left,right,mid,p,temp,count;count=1;while(cin>>l>>n>>m){cout<<"Case "<<count++<<":"<<endl;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];cin>>s;sort(a,a+l);sort(b,b+n);sort(c,c+m);p=0;for(j=0;j<l;j++)for(k=0;k<n;k++)d[p++]=a[j]+b[k];             //此处是亮点sort(d,d+p);for(i=0;i<s;i++){cin>>x;temp=0;for(j=0;j<m;j++){left=0;right=p-1;while(left<=right){mid=(left+right)/2;    if(c[j]+d[mid]==x){cout<<"YES"<<endl;temp=1;break;}else if(c[j]+d[mid]<x)left=mid+1;elseright=mid-1;}if(temp==1)break;}if(temp==0)cout<<"NO"<<endl;}}}

0 0
原创粉丝点击