Submission #1297438

#TimeUsernameProblemLanguageResultExecution timeMemory
1297438Jawad_Akbar_JJThe Big Prize (IOI17_prize)C++20
0 / 100
27 ms2104 KiB
#include <iostream>
#include <vector>
#include "prize.h"

using namespace std;
int tot, Ans;
vector<int> res;


void Solve(int l, int r, int k, int cnt){
	vector<int> rs;
	if (cnt == 0 or l == r)
		return;

	int mid = (l + r) / 2, m1 = mid;
	rs = ask(mid);

	// cout<<l<<" "<<mid<<" "<<r<<" "<<k<<" "<<cnt<<" "<<rs[0]<<" "<<rs[1]<<endl;

	if (rs[0] + rs[1] != tot){
		Ans += (rs[0] + rs[1] == 0) * mid;
		while (m1 < r - 1){
			rs = ask(++m1);
			Ans += (rs[0] + rs[1] == 0) * m1;
			if (rs[0] + rs[1] != tot)
				break;
		}
		if (m1 == r - 1 and rs[0] + rs[1] != tot)
			m1++;

		// cout<<"here "<<m1<<" "<<rs[0]<<" "<<rs[1]<<endl;

		if (m1 == r)
			Solve(l, mid, k, cnt - (m1 - mid));
		else
			Solve(l, mid, k, k - rs[1] - (m1 - mid));
		
		Solve(m1, r, rs[1], cnt - (k - rs[1]));
		return;
	}
	
	Solve(l, mid, k, k - rs[1]);
	Solve(mid, r, rs[1], cnt - (k - rs[1]));
}

int find_best(int n){
	srand(time(0));

	for (int i=1;i<=20;i++){
		int id = rand() % n;
		res = ask(id);
		tot = max(tot, res[0] + res[1]);
	}

	Solve(0, n, tot, tot);

	return Ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...