Submission #626578

#TimeUsernameProblemLanguageResultExecution timeMemory
626578Mounir커다란 상품 (IOI17_prize)C++14
20 / 100
111 ms1364 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 = 450;
map<int, int> occs;

int find_best(int n) {
	int sumMax = -1;
	for (int i = 0; i < C; ++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];
	}

	for (int i = C; i < n; ++i){
		vector<int> ans = ask_res(i);
		if (ans[0] + ans[1] == 0) return i;
		if (ans[0] + ans[1] != sumMax) 
			continue;
		int pasBonbons = ans[0];
		int deb = i + 1, fin = n, saut = n - 1;
		while (fin >= deb){
			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);
			}
			else 
				deb = mid + 1;
		}

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

Compilation message (stderr)

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