Submission #767699

#TimeUsernameProblemLanguageResultExecution timeMemory
767699SanguineChameleonThe Big Prize (IOI17_prize)C++17
90 / 100
79 ms336 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
 
const int lim = 470;
 
int find_best(int n) {
	if (n <= lim) {
		for (int i = 0; i < n; i++) {
			vector<int> res = ask(i);
			if (res[0] + res[1] == 0) {
				return i;
			}
		}
	}
	int mx = 0;
	for (int i = 0; i < lim; i++) {
		vector<int> res = ask(i);
		if (res[0] + res[1] == 0) {
			return i;
		}
		mx = max(mx, res[0] + res[1]);
	}
	int cur = lim;
	while (true) {
		vector<int> res1 = ask(cur);
		if (res1[0] + res1[1] == 0) {
			return cur;
		}
		if (res1[0] + res1[1] < mx) {
			cur++;
			continue;
		}
		int lt = cur + 1;
		int rt = n - 2;
		while (lt <= rt) {
			int mt = (lt + rt) / 2;
			vector<int> res2 = ask(mt);
			if (res2[0] + res2[1] == 0) {
				return mt;
			}
			if ((res2[0] + res2[1] == res1[0] + res1[1]) && (res2[0] == res1[0])) {
				cur = mt;
				lt = mt + 1;
			}
			else {
				rt = mt - 1;
			}
		}
		cur++;
	}
	return -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...