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:yuenyun at 2003-07-10 19:20:16 > 一:C比C++高魈! > 二:调用的STL快排看起来不好,但比自己写的快排要好的多! > 三:有些东西并不是算法错,而是你工具选的好不好 > 4:谢谢大家,谢谢谢谢,老宋,你太牛了! > > > Source > > Problem Id:1002 User Id:yuenyun > Memory:440K Time:781MS > Language:C++ Result:Accepted > > Source > //调用C的输入输出,但用库函数的快排 > #include <iostream> > #include <stdlib.h> > //#include <search.h> > using namespace std; > int a[100000]; > char b[40]; > > > int cmp(const void *t1,const void *t2) > {int *a,*b; > a=(int *)t1; b=(int *)t2; > if (*a>*b) return 1; > if (*a<*b) return -1; > return 0; > } > > void main() > { > > int num; > // cin>>num; > scanf("%d",&num); > if (num<2) > { > // cin>>b; > scanf("%s",b); > // cout<<"No duplicates."; > printf("No duplicates."); > } > else > { > for (int i=0;i<num;i++) > { > // cin>>b; > scanf("%s",b); > int result=0; > for (int j=0;j<strlen(b);j++) > { > switch(b[j]) > { > case('A'): > case('B'): > case('C'): > { > b[j]='2'; > break; > } > case('D'): > case('E'): > case('F'): > { > b[j]='3'; > break; > } > case('G'): > case('H'): > case('I'): > { > b[j]='4'; > break; > } > case('J'): > case('K'): > case('L'): > { > b[j]='5'; > break; > } > case('M'): > case('N'): > case('O'): > { > b[j]='6'; > break; > } > case('P'): > case('R'): > case('S'): > { > b[j]='7'; > break; > } > case('T'): > case('U'): > case('V'): > { > b[j]='8'; > break; > } > case('W'): > case('X'): > case('Y'): > { > b[j]='9'; > break; > } > > > } > > > if (b[j]>='0' && b[j]<='9') > { > result=10*result+b[j]-('1'-1); > } > } > a[i]=result; > } > qsort(a,num,sizeof(int),cmp); > > int flag=0; //是否是不存在有重复的串 > int pp=0; > while(pp<num) //记数指针pp遍历num一遍而已,不算多吧 > { > int sum=1; > int i=1; > while(a[pp]==a[pp+i]) //只是记录重复的串个数,其并不重复记,因为它往后移动时,PP会动所以 > //其外部循环并没有累计记数,即它和外部大循环在一起才记了NUM次; > { > i++; > sum++; > } > if (sum>1) //如果记数值大于1那么就输出; > { > int x1=a[pp]/10000; //前3位 > int y1=a[pp] % 10000; //后4位 > > if (x1>99) //如果前三位不足,看其有几位之前用0补足3位; > // cout<<x1<<"-"; > printf("%d-",x1); > > else if (x1>9) > // cout<<"0"<<x1<<"-"; > printf("0%d-",x1); > // printf("%d",x1); > // printf("-"); > else > // cout<<"00"<<x1<<"-"; > printf("00%d-",x1); > // printf("%d-",x1); > if (y1>999) //如果后4位不足,看其有几位用0补足4位; > // cout<<y1<<" "<<sum<<endl; > printf("%d %d\n",y1,sum); > else if (y1>99) > // cout<<"0"<<y1<<" "<<sum<<endl; > printf("0%d %d\n",y1,sum); > else if (y1>9) > // cout<<"00"<<y1<<" "<<sum<<endl; > printf("00%d %d\n",y1,sum); > else if (y1>=0) > // cout<<"000"<<y1<<" "<<sum<<endl; > printf("000%d %d\n",y1,sum); > flag=1; //只要有一组多于2个的串就将标志FLAG为1; > > } > > pp=pp+i; > } > if (flag==0) //整个大循环完了后,看FLAG如为0则输出。。。 > // cout<<"No duplicates."; > printf("No duplicates."); > } > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator