| ||||||||||
| 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