您的位置:首页 > 其它

SRM 579 Div II Level Two: UndoHistory

2013-07-28 01:42 507 查看
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12523

模拟每个步骤,用set保存history字符串。

代码如下:

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <climits>
#include <cmath>

using namespace std;

/************** Program Begin *********************/

class UndoHistory {
public:
int minPresses(vector <string> lines) {
int res = 0;
string buf = "";
set <string> his;
his.insert("");
int buf_size, his_size;
for (int i = 0; i < lines.size(); i++) {
buf_size = buf.size();
his_size = 0;
for (int j = lines[i].size(); j >= 1; j--) {
if ( !his.insert(lines[i].substr(0, j)).second ) {
his_size = j;
break;
}
}
/* use buf */
if (his_size < buf_size + 2 && buf == lines[i].substr(0, buf_size)) {
res += lines[i].size() - buf_size + 1;
for (int j = buf_size + 1; j <= lines[i].size(); j++) {
his.insert(lines[i].substr(0, j));
}
}
/* use history */
else if (his_size > 0) {
res += lines[i].size() - his_size + 3;
for (int j = his_size + 1; j <= lines[i].size(); j++) {
his.insert(lines[i].substr(0, j));
}
}
/* from empty */
else {
res += lines[i].size() + 3;
for (int j = 1; j <= lines[i].size(); j++) {
his.insert(lines[i].substr(0, j));
}
}
/* update buf */
buf = lines[i];
}

return res;
}
};

/************** Program End ************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: