| ||||||||||
| 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 | |||||||||
你们三个的大号小号关系一看便知,赶快放弃这种败坏的行为吧!In Reply To:所谓的题解(鉴于此题代码贫瘠,所以提供AC代码) Posted by:BAD_GUY at 2012-08-06 10:34:49 > 数组开到100000才有希望,字符串最好开到10
> 看清x是小写还是大写
> 最好通读一遍题
> 数据结构只用数组就行,少用STL(sort除外)
> #include <cstdio>
> #include <string.h>
> #include <algorithm>
> using namespace std;
> struct output {int ZIP;int cnt,bun;}O[100000];
> char a[10],vil[100000][10];
> bool M[100000];
> int Tv,To,Tl,Tb,cnt[100000];
> bool cmp(output a,output b) {
> return a.ZIP<b.ZIP;
> }
> int main()
> {
> while(scanf("%s",a)!=EOF) {
> if(a[0]=='?') break;
> bool flag=1;
> for(int i=0;i<strlen(a);i++)
> if(!(a[i]>='0' && a[i]<='9')) flag=0;
> bool flag2=0;
> for(int i=0;i<strlen(a);i++) if(a[i]!='0') flag2=1;
> if(strlen(a)!=5 || !flag || !flag2) {
> for(int i=0;i<strlen(a);i++) vil[Tv][i]=a[i];
> Tv++;
> continue;
> }
> int num=0;
> for(int i=0;i<strlen(a);i++) num=num*10+a[i]-'0';
> cnt[num]++;
> }
> //puts("sdfsdf");
> for(int i=10000;i<=99999;i++) if(cnt[i]>=10){
> int tmp=i;
> O[To].ZIP=i,O[To].cnt=cnt[i];
> Tl+=cnt[i];
> tmp=0;
> while(cnt[i]>0) {
> cnt[i]-=15;
> tmp++;
> }
> O[To].bun=tmp;
> Tb+=tmp;
> To++;
> cnt[i]=0;
> }
> sort(O,O+To,cmp);
> puts("ZIP LETTERS BUNDLES\n");
> for(int i=0;i<To;i++)
> printf("%d%12d%12d\n",O[i].ZIP,O[i].cnt,O[i].bun);
> puts("");
> To=0;
> for(int i=100;i<=999;i++) {
> int cnt1=0;
> for(int j=0;j<=99;j++) cnt1+=cnt[i*100+j];
> if(cnt1>=10) {
> for(int j=0;j<=99;j++) cnt[i*100+j]=0;
> int tmp=i;
> O[To].ZIP=i,O[To].cnt=cnt1;
> Tl+=cnt1;
> tmp=0;
> while(cnt1>0) {
> cnt1-=15;
> tmp++;
> }
> O[To].bun=tmp;
> Tb+=tmp;
> To++;
> }
> }
> sort(O,O+To,cmp);
> for(int i=0;i<To;i++)
> printf("%dxx%12d%12d\n",O[i].ZIP,O[i].cnt,O[i].bun);
> puts("");
> To=0;
> for(int i=10000;i<=99999;i++) if(cnt[i]>0){
> int tmp=i;
> O[To].ZIP=i,O[To].cnt=cnt[i];
> Tl+=cnt[i];
> O[To].bun=0;
> To++;
> cnt[i]=0;
> }
> sort(O,O+To,cmp);
> for(int i=0;i<To;i++)
> printf("%d%12d%12d\n",O[i].ZIP,O[i].cnt,O[i].bun);
> puts("");
> printf("TOTALS%11d%12d\n\n",Tl,Tb);
> puts("INVALID ZIP CODES\n");
> for(int i=0;i<Tv-1;i++) if(!M[i])
> for(int j=i+1;j<Tv;j++) if(strcmp(vil[j],vil[i])==0)
> M[j]=1;
> for(int i=0;i<Tv;i++) if(M[i]==0)
> printf("%s\n",vil[i]);
> return 0;
> }
>
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator