読者です 読者をやめる 読者になる 読者になる

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でも見ながら解く。