TopCoder SRM 520 DIV2
Rating: 1014(緑)→1087(緑)
調子としては悪くないが、気分的に1000は解けてほしかった。毎回これか、これを上回ってくれる調子だと良いなという感じ。
531.87 Point
250: SRMRoomAssignmentPhase
#include <iostream> #include <sstream> #include <string> #include <vector> #include <algorithm> using namespace std; class SRMRoomAssignmentPhase { public: int countCompetitors(vector <int> ratings, int K) { vector<pair<int, int> > sorted(ratings.size()); for (int i = 0; i < ratings.size(); ++i) { sorted[i] = make_pair(ratings[i], i); } sort(sorted.begin(), sorted.end()); int myRoom = 0, myIdx = 0; for (int i = 0; i < sorted.size(); ++i) { if (sorted[i].second == 0) { myRoom = i % K; myIdx = i; break; } } int res = 0; for (int i = myIdx + 1; i < sorted.size(); ++i) { if (i % K == myRoom) res++; } return res; } };
237.03 Point
いかにも頭の中をそのまま曝け出したようなコード。まあここで考えて式作ってたら僕はこの速度ではサブミットできないので仕方ないです。
500: SRMCodingPhase
#include <iostream> #include <sstream> #include <string> #include <vector> #include <climits> #include <algorithm> #include <numeric> using namespace std; class SRMCodingPhase { public: int countScore(vector <int> points, vector <int> skills, int luck) { int res = 0; for (int i = 1; i < (1 << 3); ++i) { vector<int> point, skill, weight; for (int j = 0; j < 3; ++j) { if (i & (1 << j)) { point.push_back(points[j]); skill.push_back(skills[j]); weight.push_back(1 << (j + 1)); } } int curLuck = luck; for (int j = skill.size() - 1; 0 <= j; --j) { if (curLuck >= (skill[j] - 1)) { curLuck -= (skill[j] - 1); skill[j] = 1; } else if (1 < skill[j] && curLuck < (skill[j] - 1) && curLuck > 0) { skill[j] -= curLuck; curLuck = 0; break; } } int curPoint = 0, curTime = accumulate(skill.begin(), skill.end(), 0); for (int j = 0; j < point.size(); ++j) { curPoint += point[j] - weight[j] * skill[j]; } if (curTime > 75) continue; else res = max(res, curPoint); } return res; } };
294.84 Point
1000:
解けてほしかった。解けなかった。あとでEditorialでも見ながら解く。