糖果问题枚举会导致超时的。。
#include<stdio.h>
float mabs(float a){ if(a<0) a=-a; return (a);}int max(int a[4]){ int i,j,t; for(i=0;i<3;i++) { if(a[i]>a[i+1]) { j=a[i+1];a[i+1]=a[i];a[i]=j; }}
//printf("%d%d%d %d\n",a[0],a[1],a[2],a[3]); t=a[3]; return (t);}int min(int a[4]){ int i,j,t; for(i=0;i<3;i++) { if(a[i]<a[i+1]) { j=a[i+1];a[i+1]=a[i];a[i]=j; } } t=a[3]; //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); return (t);}int main(){ int i,j,m,n,a[4]={0}; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } if(n==0) printf("YES\n1\n1\n3\n3\n"); else if(n==1) { if(n%2==0) printf("YES\n%d\n%d\n%d\n",a[0],a[0]/2,a[0]*1.5); else printf("YES\n%d\n%d\n%d\n",a[0]+1,(a[0]/2)+1,(a[0]/2)+1+a[0]); } else if(n==2) { float e=0,r,w; int h=0,b[2]={0},f,i,j; //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); for(i=1;i<=1000000;i++) { for(j=1;j<=1000000;j++) { a[2]=i; a[3]=j; for(f=0;f<2;f++) { b[f]=a[f]; } //printf("%d%d%d\n",w,e,r); //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); w=(a[0]+a[1]+a[2]+a[3])/4.0; e=max(a)-min(a); //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); r=(a[0]+a[1]+a[2]+a[3]-max(a)-min(a))/2.0; //printf("%f %f %f\n",w,e,r); if((mabs(w-e)<1e-6)&&(mabs(e-r)<1e-6)) { printf("YES\n%d\n%d\n",i,j); h++; break; } for(f=0;f<2;f++) { a[f]=b[f]; } } if(h!=0) break; } if(h==0) printf("NO"); } else if(n==3) { float e=0; float r,w; int h=0,b[3]={0}; //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); for(i=1;i<=1000000;i++) { a[3]=i; for(j=0;j<3;j++) { b[j]=a[j]; } //printf("%d%d%d\n",w,e,r); //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); w=(a[0]+a[1]+a[2]+a[3])/4.0; e=max(a)-min(a); //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); r=(a[0]+a[1]+a[2]+a[3]-max(a)-min(a))/2.0; //printf("%f %f %f\n",w,e,r); if(((w-e)<1e-6)&&((e-r)<1e-6)) { printf("YES\n%d\n",i); h++; break; } for(j=0;j<3;j++) { a[j]=b[j]; } } if(h==0) printf("NO"); } else if(n==4) { float e=0; float r,w; //printf("%d%d%d\n",w,e,r); //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); w=(a[0]+a[1]+a[2]+a[3])/4.0; e=max(a)-min(a); //printf() //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]); r=(a[0]+a[1]+a[2]+a[3]-max(a)-min(a))/2.0; //printf("%f %f %f\n",w,e,r); if(mabs((w-e)<1e-6)&&(mabs(e-r)<1e-6)) printf("YES"); else printf("NO\n"); }return 0;}