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 |
痛苦AC留恋 TLE请参考//痛苦AC。。特此留恋,TLE的请参考。 //首先声明我是一个大菜鸟。 //一个晚上加一个上午加半个下午,查了N多资料。。终于AC了。。 //最主要我还是拿手机交题的,交一次题还得来回抽插内存卡,不容易啊!!! //没AC的时候还好说,AC的那一刹那我都疯了。。 //我的主要问题是TLE //第一次TLE是因为冒泡太慢。。 //第二次自己写了个先查找后冒泡的算法,还是不行。 //第三次去Discuss看到了STL的字眼,开始查STL排序的用法。 //慢慢的学会了用STL里的sort()排字符串。修改程序提交,还是TLE。 //第四次,考虑到输入数据太大,开始优化输入。由一开始的n个if优化到 //现在这个样子。开始在本地测试,从文件读100000组数据,再输出结果, //本地运行时间1790ms,提交,还是TLE,疯。。。 //(我的IDE用的是CodeBlocks,可以看程序运行时间)。 //第五次,着手把cin cout改成scanf printf。发现scanf不能像cin那样读string, //又改程序。后来用char a[n][100] //发现char a[n][100]要初始化,不然得不到正确结果。 //于是初始化成a[100001][100]={""};但是我的IDE报错说 //a[100001][100]这里的100001太大,我又一次疯。。 //接着就是反复修改提交 + TLE N次。 //最后抱着背水一站的心态 改成a[100001][100](本地会报数组开太大的错), //提交的时候选择C++(平时都用G++);竟然AC了。。。这下彻底疯了。。。 //其实都想到了再不AC就去学map了。。。 //Memory:12748K Time:610MS Lang:C++(实际上是G++,提交的时候选C++才会通过) //CodeLength:1239B //写那么多,就当作个人发泄,让各位见笑了。 #include <stdio.h> #include <string> #include <vector> #include <algorithm> using namespace std; int main() { int n; scanf("%d",&n); char a[100001][100]={""}; vector<string> b(a,a+n); char read[26]={'2','2','2','3','3','3','4','4','4','5','5','5', '6','6','6','7','@','7','7','8','8','8','9','9','9'}; for(int i=0;i<n;i++) { scanf("%s",a[i]); } for(int i=0;i<n;i++) { int tmp=0; for(int j=0;j<7;j++) { while(a[i][tmp]=='-') {tmp++;} int t=a[i][tmp]-65; if(t>=0) {b[i]+=read[t];} else {b[i]+=a[i][tmp];} tmp++; } } sort(b.begin(),b.end()); int tmp=0; int flag=0; for(int i=0;i<n;i++) { if(i+1>=n||b[i]!=b[i+1]) { if((i+1-tmp)!=1) { printf("%c%c%c%c%c%c%c%c %d\n",b[i][0],b[i][1],b[i][2] ,'-',b[i][3],b[i][4],b[i][5],b[i][6],i+1-tmp); flag=1; } tmp=i+1; } } if(flag==0) printf("No duplicates.\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