# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
637567 | boris_mihov | The Big Prize (IOI17_prize) | C++17 | 98 ms | 1836 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 <algorithm>
#include <iostream>
#include <cassert>
#include <numeric>
#include <vector>
typedef long long llong;
const int MAXN = 200000 + 10;
const int INF = 1e9;
int ans;
std::vector <int> res;
std::pair <int,int> asked[MAXN];
inline std::pair <int,int> query(int pos)
{
if (asked[pos].first != -1) return asked[pos];
res = ask(pos - 1);
if (res[0] + res[1] == 0) ans = pos;
return asked[pos] = {res[0], res[1]};
}
int leftCnt;
int rightCnt;
int cntBig;
int binaryCnt;
int binarySearchLeft(int from, int to)
{
int l = from, r = to, mid;
while (l < r - 1)
{
int mid = (l + r) / 2;
auto [left, right] = query(mid);
if (ans != 0) return -1;
if (left + right != cntBig)
{
r = mid;
continue;
}
if (left != leftCnt)
{
r = mid;
continue;
}
l = mid;
}
query(r);
leftCnt++;
return r;
}
int binarySearchRight(int from, int to)
{
int l = from, r = to, mid;
while (l < r - 1)
{
int mid = (l + r) / 2;
auto [left, right] = query(mid);
if (ans != 0) return -1;
if (left + right != cntBig)
{
l = mid;
continue;
}
if (right != rightCnt)
{
l = mid;
continue;
}
r = mid;
}
query(l);
rightCnt++;
return l;
}
int find_best(int n)
{
srand(69);
std::fill(asked + 1, asked + 1 + n, std::make_pair(-1, -1));
for (int i = 1 ; i <= 10 || cntBig < 34 ; ++i)
{
int rndPos = rand()%n + 1;
cntBig = std::max(cntBig, query(rndPos).first + query(rndPos).second);
}
int l = 0, r = n + 1;
while (ans == 0 && l < r - 1)
{
if (rand()%2 == 0) l = binarySearchLeft(l, r);
else r = binarySearchRight(l, r);
}
if (ans == 0 && l != 0) query(l);
if (ans == 0 && r != n + 1) query(r);
return ans - 1;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |