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 |
终于不再TLE了,先排序在比较之前是先比较在排序,一直都是TLE 改成先排序后比较,就ac了,填上代码 #include <stdio.h> #include <string.h> int getinput(char **in, int n); int count_sort(char **in,int *pre_seq,int *aft_seq,int len, int index); char map[] = "22233344455566677778889999"; int main() { int n, i,j,times,top; int *pre_seq,*aft_seq; char **in; bool dupFlag; scanf("%d",&n); in=new char*[n]; top=0; for(i=0; i<n;i++) { in[i]=new char[10]; } getinput(in,n); //sort the telephone num pre_seq=new int[n]; aft_seq=new int[n]; for(i=0;i<n;i++) pre_seq[i]=i; for(i=7;i>=0;i--) { if(i%2) count_sort(in,pre_seq,aft_seq,n,i); else count_sort(in,aft_seq,pre_seq,n,i); } dupFlag=false; for(i=0;i<n;) { times=1; for(j=i+1;j<n;j++) { if(strcmp(in[pre_seq[i]],in[pre_seq[j]])==0) times++; else break; } if(times>1) { dupFlag=true; printf("%s %d\n",in[pre_seq[i]],times); } i=j; } if(dupFlag==false) printf("No duplicates.\n"); delete []in; delete []pre_seq; delete []aft_seq; return 0; } int getinput(char **in, int n) { char temp[50]; int i,len,j,k; for(i=0;i<n;i++) { scanf("%s",temp); len=strlen(temp); for(j=0,k=0;j<len;j++) if(temp[j]!='-') { if(temp[j]>='A' && temp[j]<='Z') in[i][k]=map[temp[j]-'A']; else in[i][k]=temp[j]; k++; if(k==3) in[i][k++]='-'; } in[i][k]='\0'; } return 0; } int count_sort(char **in,int *pre_seq,int *aft_seq,int len, int index) { int i,temp; int c[10]; if(len==0) return 0; if(index==3) { for(i=0;i<len;i++) aft_seq[i]=pre_seq[i]; return 0; } for(i=0;i<10;i++) c[i]=0; for(i=0;i<len;i++) { temp=in[pre_seq[i]][index]-'0'; c[temp]++; } for(i=1;i<10;i++) c[i]=c[i]+c[i-1]; for(i=len-1;i>=0;i--) { temp=in[pre_seq[i]][index]-'0'; aft_seq[c[temp]-1]=pre_seq[i]; c[temp]--; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator