# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
333191 | mohamedsobhi777 | The Big Prize (IOI17_prize) | C++14 | 111 ms | 5484 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
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 <= 4000)
return solve1(n);
for (int i = 0; i < 1000; ++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 < 1000; ++i)
enough += sum(i) != mc;
for (int i = 1000; i < n; ++i)
{
Ask(i);
if (sum(i) != mc)
{
if (sum(i) == 0)
return i;
++enough;
continue;
}
int lo = i, hi = 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)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |