Submission #626556

#TimeUsernameProblemLanguageResultExecution timeMemory
626556MounirThe Big Prize (IOI17_prize)C++14
0 / 100
109 ms1416 KiB
#include "prize.h"
#include <bits/stdc++.h>
#define chmin(x, v) x = min(x, v)
using namespace std;

map<int, vector<int>> ans;

vector<int> ask_res(int i){
	if (ans.count(i)) return ans[i];
	ans[i] =  ask(i);
	//if (i != 7) cout << "query " << i << " " << rep[0] << " " << rep[1] <<  endl;
	return ans[i];
}

const int C = 6;
map<int, int> occs;

int find_best(int n) {
	int sumMax = -1;
	for (int i = 0; i < 500; ++i){
		vector<int> ans = ask_res(i);
		occs[ans[0] + ans[1]]++;
		if (ans[0] + ans[1] == 0) return i;
		if (ans[0] + ans[1] > sumMax)
			sumMax = ans[0] + ans[1];
	}

	int pasBonbons = 500 - occs[sumMax];
	for (int i = 500; i < n; ++i){
		vector<int> ans = ask_res(i);
		if (ans[0] + ans[1] == 0) return i;
		if (ans[0] + ans[1] == sumMax) 
			continue;
		pasBonbons++;
		int deb = i + 1, fin = n, saut = n;
		while (true){
			int mid = (deb + fin)/2;
			vector<int> cur = ask_res(mid);
			if (cur[0] + cur[1] == 0) return mid;
			if (cur[0] + cur[1] != sumMax){
				fin = mid - 1;
				chmin(saut, mid);
				continue;
			}

			if (cur[0] != pasBonbons) {
				fin = mid - 1;
				chmin(saut, mid - 1);
			}
			else 
				deb = mid;
		}

		//on a le prochain pas bonbon
		i = saut - 1;
	}
}

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:57:1: warning: control reaches end of non-void function [-Wreturn-type]
   57 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...