第一次写二分的题目,有点不熟练
#include<stdio.h> #include<stdlib.h> int a1[500],a2[500],a3[500],b[250000]; int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main() { int i,j,k,n,m,num,p,eam,temp,op=1; int dow,up,mid,flag; while(scanf("%d%d%d",&n,&m,&k)!=-1) { for(i=0;i<n;i++) scanf("%d",&a1[i]); for(i=0;i<m;i++) scanf("%d",&a2[i]); for(i=0;i<k;i++) scanf("%d",&a3[i]); num=0; for(i=0;i<n;i++) for(j=0;j<m;j++) b[num++]=a1[i]+a2[j]; qsort(b,num,sizeof(b[0]),cmp); qsort(a3,k,sizeof(a3[0]),cmp); scanf("%d",&p); printf("Case %d:\n",op++); while(p--) { scanf("%d",&eam); flag=0; for(i=0;i<k;i++) { temp=eam-a3[i]; dow=0;up=num-1;mid=(dow+num)/2; while(up-dow>1) { if(temp>b[mid])dow=mid; else if(temp<b[mid])up=mid; else {flag=1;break;} mid=(dow+up)/2; } if(flag)break; } if(flag==1)puts("YES"); else puts("NO"); } } return 0; }