Submission #1252869

#TimeUsernameProblemLanguageResultExecution timeMemory
1252869TINSouvenirs (IOI25_souvenirs)C++20
21 / 100
12 ms400 KiB
#include "souvenirs.h"
#include <utility>
#include <vector>

void buy_souvenirs(int N, long long P0) {
	// std::pair<std::vector<int>, long long> res = transaction(3);
	std::pair<std::vector<int>, long long> res;
	if (N == 2) {
		res = transaction(P0 - 1);
		return;
	}
	if (N == 3) {
		// P0 > x > y
		long long x, y;
		res = transaction(P0 - 1);
		if ((int) res.first.size() == 1) {
			x = P0 - 1 - res.second;
			res = transaction(x - 1);
		} else {
			long long sum = P0 - 1 - res.second;
			// x + y = sum
			// y * 2 < sum
			res = transaction((sum - 1) / 2);
		}
		return;
	}
	std::vector<long long> p(N, 0);
	std::vector<int> cnt(N, 0);
	p[0] = P0;
	for (int i = 1; i < N; i++) {
		res = transaction(p[i - 1] - 1);
		cnt[i]++;
		p[i] = p[i - 1] - 1;
		if ((int) res.first.size() > 1 || res.second > 0) p[i]--;
		if ((int) res.first.size() > 1) cnt[res.first[1]]++;
		while (cnt[i] < i) {
			res = transaction(p[i]);
			++cnt[i];
		}
	}
	return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...