超时代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[510],b[510],c[510]; int main() { int l,n,m,s; int i,j,k,p,x; int _case=0;; while(scanf("%d %d %d",&l,&n,&m)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(i=0;i<l;i++) scanf("%d",&a[i]); sort(a,a+l); for(i=0;i<n;i++) scanf("%d",&b[i]); sort(b,b+n); for(i=0;i<m;i++) scanf("%d",&c[i]); sort(c,c+m); scanf("%d",&s); printf("Case %d:\n",++_case); for(i=0;i<s;i++) { scanf("%d",&x); int kai=0,kai1=0; if(a[0]+b[0]+c[0]>=x) { if(a[0]+b[0]+c[0]==x)kai=1; goto RE; } if(a[l-1]+b[n-1]+c[m-1]<=x) { if(a[l-1]+b[n-1]+c[m-1]==x)kai=1; goto RE; } for(j=0;j<l;j++) { if(a[j]>x)break; for(k=0;k<n;k++) { if(a[j]+b[k]>x) { kai1=1; break; } for(p=0;p<m;p++) { if(a[j]+b[k]+c[p]==x) { kai=1; break; } } if(kai==1)break; } if(kai1==1||kai==1)break; } RE: if(kai==1)printf("YES\n"); else printf("NO\n"); } } return 0; }
WA:
#include<stdio.h> #include<string.h> #include<algorithm> #include<vector> using namespace std; int a[510],b[510],c[510],si[1010]; int search(int LN[],int h,int t) { int mid,front=0,back=h-1; while(front<=back) { mid=(front+back)/2; if(LN[mid]==t) return 1; if(LN[mid]<t) front=mid+1; else back=mid-1; } return 0; } int main() { int l,n,m,s; int i,j,k,p,x; int _case=0;; while(scanf("%d %d %d",&l,&n,&m)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(i=0; i<l; i++) scanf("%d",&a[i]); sort(a,a+l); //printf("%d\n\n",a[2]); for(i=0; i<n; i++) scanf("%d",&b[i]); sort(b,b+n); for(i=0; i<m; i++) scanf("%d",&c[i]); sort(c,c+m); scanf("%d",&s); for(i=0;i<s;i++) scanf("%d",&si[i]); printf("Case %d:\n",++_case); for(i=0; i<s; i++) { x=si[i]; int kai=0; if(a[0]+b[0]+c[0]>=x) { if(a[0]+b[0]+c[0]==x)kai=1; goto RE; } if(a[l-1]+b[n-1]+c[m-1]<=x) { if(a[l-1]+b[n-1]+c[m-1]==x)kai=1; goto RE; } for(j=0; j<l; j++) { //if(a[j]>=x)break; for(k=0; k<n; k++) { /*if(a[j]+b[k]>=x) { kai1=1; break; }*/ if(search(c,m,x-a[j]-b[k])) { kai=1; break; } } if(kai==1)break; } RE: if(kai==1)printf("YES\n"); else printf("NO\n"); } } return 0; }
正解: