Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:需要注意的数据In Reply To:需要注意的数据 Posted by:MIRKING at 2008-07-24 00:33:03 > 000 0 > 250 0 > 2500 0 > 5500 0 > 6350 630 > 77675 765 > 77570 7770 > 12345 43215 > 1234567890 9876543210 上述数据我全都过了,而且在川大的OJ上也交过了,为什么还是WA了 哪位指点一下啊,代码如下 #include<stdio.h> #define in(a,b) (a<b?a:b) #define ax(a,b) (a>b?a:b) char s[1000+4]; int num[10]; int print[10]; bool ok; bool tail5; void process(void) { int num5 = num[2]+num[5]+num[8]; int num10 = num[1]+num[4]+num[7]; int num0 = num[3]+num[6]+num[9]; if(num[0]) { ok=true; tail5=false; print[9]=num[9]; print[6]=num[6]; print[3]=num[3]; if(num5>=1&&num10>=1 || num0>0) { print[0]=num[0];//如果末尾是5满足条件,是0一样满足条件 //..... int min5; int min10; if((num5*5+num10*10)%15==0) { min5=num5; min10=num10; } else if((num5*5+num10*10)%15==5) { if(num5>=1) { min5=num5-1; min10=num10; } else if(num10>=2) { min5=num5; min10=num10-2; } else { min5=0; min10=0; } } else { if(num10>=1) { min5=num5; min10=num10-1; } else if(num5>=2) { min5=num5-2; min10=num10; } else { min5=0; min10=0; } } if(min5==0&&min10==0&&num0==0) { print[0]=1; return; } //////////////////////////////////// if(num[8]<=min5) { print[8]+=num[8];min5-=num[8]; num[8]=0; } else { print[8]+=min5; num[8]=num[8]-min5; min5-=min5; } if(num[5]<=min5) { print[5]+=num[5];min5-=num[5]; num[5]=0; } else { print[5]+=min5; num[5]=num[5]-min5; min5-=min5; } if(num[2]<=min5) { print[2]+=num[2];min5-=num[2]; num[2]=0; } else { print[2]+=min5; num[2]-=min5; min5-=min5; } /////////////////////////////////////// if(num[7]<=min10) { print[7]+=num[7]; min10-=num[7]; num[7]=0; } else { print[7]+=min10; num[7]-=min10; min10=0; } if(num[4]<=min10) { print[4]+=num[4];min10-=num[4]; num[4]=0; } else { print[4]+=min10; num[4]-=min10; min10=0; } if(num[1]<=min10) { print[1]+=num[1];min10-=num[1]; num[1]=0; } else { print[1]+=min10; num[1]-=min10; min10=0; } } else { print[0]=1; } } else { tail5=true; num[5]--; num5--; print[9]=num[9]; print[6]=num[6]; print[3]=num[3]; if(num10>=1||num5>=2) { ok=true; //...... int min5,min10; min5=num5; min10=num10; if((num5*5+num10*10)%15==0) { if(min5>=1) { min5--; } else if(min10>=2) { min10-=2; } else { min5=0; min10=0; } } else if((num5*5+num10*10)%15==5) { if(min10>=1) min10--; else if(min5>=2) { min5-=2; } else { min10=0; min5=0; } } if(min10==0&&min5==0) { ok=false; return; } //////////////////////////////////// if(num[8]<=min5) { print[8]+=num[8];min5-=num[8]; num[8]=0; } else { print[8]+=min5; num[8]=num[8]-min5; min5-=min5; } if(num[5]<=min5) { print[5]+=num[5];min5-=num[5]; num[5]=0; } else { print[5]+=min5; num[5]=num[5]-min5; min5-=min5; } if(num[2]<=min5) { print[2]+=num[2];min5-=num[2]; num[2]=0; } else { print[2]+=min5; num[2]-=min5; min5-=min5; } /////////////////////////////////////// if(num[7]<=min10) { print[7]+=num[7];min10-=num[7]; num[7]=0; } else { print[7]+=min10; num[7]-=min10; min10=0; } if(num[4]<=min10) { print[4]+=num[4];min10-=num[4]; num[4]=0; } else { print[4]+=min10; num[4]-=min10; min10=0; } if(num[1]<=min10) { print[1]+=num[1];min10-=num[1]; num[1]=0; } else { print[1]+=min10; num[1]-=min10; min10=0; } } else { ok = false; } } } int main(void) { while(gets(s)!=NULL) { int i,j; ok=false; tail5=false; for(i=0;i<10;i++) print[i]=num[i]=0; for(i=0;s[i]!='\0';i++) num[s[i]-'0']++; if(!num[0]&&!num[5]) printf("impossible\n"); else { process(); if(ok) { for(i=9;i>=0;i--) { for(j=0;j<print[i];j++) { putchar(i+'0'); } } if(tail5) putchar('5'); puts(""); } else printf("impossible\n"); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator