| ||||||||||
| 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了,大牛帮忙解释一下吧 ~_~无耻了下,用了下map,嘿嘿~
可是总是超时,不明白,不考虑map内部算法的话,复杂度是O(N)没错啊。
我自己写了个输入文件生成器,生成了个100000条记录的文件,当条目形如:
--W-A--A--C-T-0-5--
这样的时候,运行时间粗略估计1s左右,
只有当条目形如:
--------------------O-----------------------------------------------H--P---------------------------------------------------------------------V-----------------------------------------------------------------N-------------------------M----------------T-
这样的时候,运行时间大概7s左右。
可是提交上去,总是TLE,悲剧。。。。难道OJ上的测试数据真的这么变态?
下面是我的代码:
=========================================
#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef map<string, int> Dictionary;
void formatString (string& str) {
for (string::iterator iter = str.begin (); iter < str.end ();) {
switch (*iter) {
case '-':
str.erase (iter);
continue;
case 'A':
case 'B':
case 'C':
str.replace (iter, iter + 1, "2");
break;
case 'D':
case 'E':
case 'F':
str.replace (iter, iter + 1, "3");
break;
case 'G':
case 'H':
case 'I':
str.replace (iter, iter + 1, "4");
break;
case 'J':
case 'K':
case 'L':
str.replace (iter, iter + 1, "5");
break;
case 'M':
case 'N':
case 'O':
str.replace (iter, iter + 1, "6");
break;
case 'P':
case 'R':
case 'S':
str.replace (iter, iter + 1, "7");
break;
case 'T':
case 'U':
case 'V':
str.replace (iter, iter + 1, "8");
break;
case 'W':
case 'X':
case 'Y':
str.replace (iter, iter + 1, "9");
break;
default:
break;
}
iter++;
}
}
int main (int argc, char** argv) {
Dictionary telephones;
int repeat;
string telephone;
cin >> repeat;
while (repeat-- > 0) {
cin >> telephone;
formatString (telephone);
telephones[telephone]++;
#ifdef _DEBUG_
cout << "_DEBUG_:" << telephone << " " << endl;
#endif
}
bool noDup = true;
for (Dictionary::iterator iter = telephones.begin ();
iter != telephones.end ();
iter++) {
if ((*iter).second > 1) {
string temp = (*iter).first;
cout << temp.insert (3, "-") << " " << (*iter).second << endl;
noDup = false;
}
}
if (noDup) {
cout << "No duplicates." << endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator