HDU-2141(二分查找_创新)

来源:互联网 发布:自制松露巧克力 知乎 编辑:程序博客网 时间:2024/06/05 05:02

这道题目.我都想死了....

看来,有些自作聪明的举动还是真的不可要.

虽然思想好像看起来很先进..

诶..反正我也没法举出返利证明那就错了..

但是删除了之后反正是能AC了.这事整的/.

贴出代码

注意那个if(   ||   )的语句..那句就是罪魁祸首...

贴出代码:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int a[505];int b[505];int c[505];int ab[255555];int num;int cmp(const void *a, const void *b){return *(int *)a-*(int *)b;}int search_bin(int p){int l=0,r=num-1;while(l<=r){int mid=(l+r)>>1;if(ab[mid]==p)return 1;else if(ab[mid]>p)r=mid-1;elsel=mid+1;}return 0;}int main(){int k=1;int L,N,M;while(scanf("%d%d%d",&L,&N,&M)!=EOF){for(int i=0;i<L;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)scanf("%d",&b[i]);for(i=0;i<M;i++)scanf("%d",&c[i]);int kk=0;for(i=0;i<L;i++){for(int j=0;j<N;j++)ab[kk++]=a[i]+b[j];}qsort(ab,kk,sizeof(ab[0]),cmp);qsort(c,M,sizeof(c[0]),cmp);//for(i=0;i<kk;i++)//printf("%d ",ab[i]);//printf("\n");//for(i=0;i<M;i++)//printf("%d ",c[i]);//printf("\n");int T;num=kk;scanf("%d",&T);printf("Case %d:\n",k++);while(T--){int que;int flag=0;scanf("%d",&que);//if(que<ab[0]+c[0]||que>ab[num-1]+c[M-1])//{//printf("NO\n");//continue;//}for(i=0;i<M;i++){int p=que-c[i];if(search_bin(p)){flag=1;printf("YES\n");break;}}if(!flag)printf("NO\n");}}return 0;}