BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #75232同步于 2013/11/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

帮忙看看,程序中哪里应该优化一下,在poj上一直是Time Limited

chancer
2013/11/16镜像同步9 回复
POJ的1002题,程序如下: #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; char maptable[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','-1','7','7','8','8','8','9','9','9','-1'}; bool ifAlphToDec(const char& alph, char& dec) { if(!isalpha(alph)) return false; else { dec = maptable[alph - 'A']; return true; } } int TransToStd(string& input, string& output ) { for(int i=0; i<input.size(); ++i) { char digit; if(ifAlphToDec(input[i],digit)) { if(output.size() == 3) output += '-'; output += digit; } else if(input[i] == '-') { continue; } else { if(output.size() == 3) output += '-'; output += input[i]; } } } int main() { vector<string> Output; int num; cin >>num; for(int i=0; i < num; ++i) { string inputOneline; string outputOneline; cin >> inputOneline; TransToStd(inputOneline, outputOneline); Output.push_back(outputOneline); } sort(Output.begin(),Output.end()); // output int dupnum = 1; vector<string>::iterator iter = Output.begin(); bool Hasdup = false; while(iter != Output.end()) { if((iter+1 != Output.end())&&(*iter == *(iter+1))) { dupnum++; } else { if(dupnum > 1) { cout << *iter << " " << dupnum << endl; Hasdup = true; dupnum = 1; } } iter++; } if(!Hasdup) cout << "No duplicates." <<endl; //system("pause"); return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
deng0515001机器人#1 · 2013/11/16
这是哪一题?不过像 string inputOneline; string outputOneline; 这种的肯定得定义在循环外面好一点
chancer机器人#2 · 2013/11/16
偷了个懒,需要outputOneline为空 【 在 deng0515001 的大作中提到: 】 : 这是哪一题?不过像 string inputOneline; string outputOneline; 这种的肯定得定义在循环外面好一点
chancer机器人#3 · 2013/11/16
1002 【 在 deng0515001 的大作中提到: 】 : 这是哪一题?不过像 string inputOneline; string outputOneline; 这种的肯定得定义在循环外面好一点
iFadeToBlack机器人#4 · 2013/11/17
是不是给个短语然后转成电话号码,打印有没有重复的? 电话号码别用string存,比较会快些。而且实在没必要在接收完所有输入排序之后才能知道重复,用个hashtable不就好了?
wuxuecheng机器人#5 · 2013/11/17
建议打时间戳看看哪地方耗时。另外,iter++ 可以改为++iter,迭代器的赋值还是蛮耗时的。
chancer机器人#6 · 2013/11/17
改成c语言版本的数组就过了。。。 【 在 wuxuecheng 的大作中提到: 】 : 建议打时间戳看看哪地方耗时。另外,iter++ 可以改为++iter,迭代器的赋值还是蛮耗时的。
iFadeToBlack机器人#7 · 2013/11/17
是改成 new string[num]了么?vector也可以写成 vector<string>(num) 你的实现有问题,存太多冗余数据了 【 在 chancer 的大作中提到: 】 : 改成c语言版本的数组就过了。。。
wuxuecheng机器人#8 · 2013/11/18
【 在 chancer 的大作中提到: 】 : 改成c语言版本的数组就过了。。。 好吧,string的构造,析构看来不容忽视啊
iFadeToBlack机器人#9 · 2013/11/18
string ctor花费的时间不多,主要时间都在vector的push_back导致的resize上了 而且通过遍历比较string查dup也是瓶颈 【 在 wuxuecheng 的大作中提到: 】 : 好吧,string的构造,析构看来不容忽视啊