Submission #333202

#TimeUsernameProblemLanguageResultExecution timeMemory
333202mohamedsobhi777The Big Prize (IOI17_prize)C++14
20 / 100
123 ms5484 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;
const int thr = 950;
vector<int> Qu[200000 + 10];
int freq[200000 + 10];
int enough;

vector<int> Ask(int i)
{
	if (Qu[i].empty())
		Qu[i] = ask(i);
	return Qu[i];
}

inline int sum(int i) { return Qu[i][0] + Qu[i][1]; }

int solve1(int n)
{
	for (int i = 0; i < n; ++i)
	{
		Ask(i);
		if (!sum(i))
			return i;
	}
}

int find_best(int n)
{
	if (n <= 4800)
		return solve1(n);

	for (int i = 0; i < thr; ++i)
	{
		Ask(i);
		freq[sum(i)]++;
		if (sum(i) == 0)
			return i;
	}
	int mc = 0, Max = 0;
	for (int i = 0; i < N; ++i)
	{
		if (freq[i] > Max)
			Max = freq[i], mc = i;
	}
	for (int i = 0; i < thr; ++i)
		enough += sum(i) != mc;

	for (int i = thr; i < n; ++i)
	{
		Ask(i);
		if (sum(i) != mc)
		{
			if (sum(i) == 0)
				return i;
			++enough;
			continue;
		}

		int lo = i, hi = min(i + 200, n - 1);
		int j = i;
		while (lo <= hi)
		{
			int mid = (lo + hi) >> 1;
			Ask(mid);
			if (sum(mid) != mc || Qu[mid][0] - enough > 0)
				hi = mid - 1;
			else
				j = mid, lo = mid + 1;
		}
		i = j;
	}
}

Compilation message (stderr)

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