TopCoder SRM 521 DIV2
Rating: 1087(緑)→1143(緑)
レーティング的にはDIV1が段々と見えてきていて嬉しい。この調子でがんばろう。
System Testが荒れたので人権のある順位になったが、荒れる意味がわからない。
回全体としては不評だった。難易度設定がおかしい。
679.96 Point
250: RedAndGreen
#include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; class RedAndGreen { public: int minPaints(string row) { vector<int> greens(row.size()), reds(row.size()); for (int i = 0; i < row.size(); ++i) { if (i != 0) greens[i] = greens[i - 1]; if (row[i] == 'G') greens[i]++; } for (int i = row.size() - 1; 0 <= i; --i) { if (i != row.size() - 1) reds[i] = reds[i + 1]; if (row[i] == 'R') reds[i]++; } int minimum = reds[0]; for (int i = 0; i < row.size() - 1; ++i) { minimum = min(minimum, greens[i] + reds[i + 1]); } minimum = min(minimum, greens.back()); return minimum; } };
212.20 Point
若干書き始めで混乱してしまったのでこの点数になってしまった。
もっと低いかと思ったが全般的にいろんな事がはやくなってきているのでこんなもんだった。
500: MissingParentheses
#include <iostream> #include <sstream> #include <string> #include <vector> #include <numeric> using namespace std; class MissingParentheses { public: int countCorrections(string par) { if (par.empty()) return 0; vector<bool> paired(par.size(), false); for (int i = 0; i < par.size(); ++i) { if (paired[i]) continue; if (par[i] == '(') { for (int j = i + 1, nest = 1; j < par.size(); ++j) { if (par[j] == '(') nest++; if (par[j] == ')') nest--; if (nest == 0) { paired[i] = paired[j] = true; break; } if (nest < 0) break; } } } int res = paired.size() - accumulate(paired.begin(), paired.end(), 0); return res; } };
467.76 Point
たしかに簡単すぎると思う。
最後のaccumulateはaccumulate(paired.begin(), paired.end(), paired.size(), minus
1000:
long longに釣られた。