Submission #785866

#TimeUsernameProblemLanguageResultExecution timeMemory
785866aymanrsThe Big Prize (IOI17_prize)C++14
97.66 / 100
52 ms336 KiB
#include<bits/stdc++.h>
using namespace std;
vector<int> ask(int i);/*{
	cout << i << '\n';
	vector<int> a(2);
	cin >> a[0] >> a[1];
	return a;
}*/
int clol, ans;
bool wegood = false;
void solve(int l, int r, int lpl, int lpr){
	int m = l+r>>1;
	auto a = ask(m);
	if(a[0]+a[1] == 0) {
		ans = m;
		wegood = true;
		return;
	}
	if(a[0]+a[1] == clol){
		if(a[0] > lpl && l < m) solve(l, m-1, lpl, a[1]);
		if(wegood) return;
		if(a[1] > lpr && r > m) solve(m+1, r, a[0], lpr);
		return;
	}
	int L = m-1, R = m+1;
	while(R < r){
		auto a = ask(R);
		if(a[0]+a[1]==0){
			ans = R;
			wegood = true;
			return;
		}
		if(a[0]+a[1]==clol){
			if(a[1] > lpr && R < r) solve(R+1, r, a[0], lpr);
			if(wegood) return;
			break;
		}
		R++;
	}
	while(L > l){
		auto a = ask(L);
		if(a[0]+a[1]==0){
			ans = L;
			wegood = true;
			return;
		}
		if(a[0]+a[1]==clol){
			if(a[0] > lpl && L > l) solve(l, L-1, lpl, a[1]);
			if(wegood) return;
			break;
		}
		L--;
	}
}
int find_best(int n){
	pair<int, pair<int, int>> lol = {0,{0, 0}};
	for(int i = 0;i < 475;i++){
		auto a = ask(i);
		if(a[0]+a[1] == 0) return i;
		lol = max(lol, make_pair(a[0]+a[1], make_pair(a[0], i)));
	}
	clol = lol.first;
	solve(lol.second.second+1, n-1, lol.second.first, 0);
	return ans;
}/*
int main(){
	int n;
	cin >> n;
	cout << find_best(n) << '\n';
}*/

Compilation message (stderr)

prize.cpp: In function 'void solve(int, int, int, int)':
prize.cpp:12:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   12 |  int m = l+r>>1;
      |          ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...