#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
int find_best(int n) {
// 5 types!
vector<pair<int, int>> cache(n, { -1, -1 });
set<int> found;
int lolpop = 34;
int crnt = 0;
while (crnt < n) {
auto qry = cache[crnt];
if (qry.first == -1) {
found.insert(crnt);
auto j = ask(crnt);
qry = { j[0], j[1] };
cache[crnt] = qry;
}
if (qry.first + qry.second == 0) return crnt;
if (qry.first + qry.second >= lolpop) break;
crnt++;
}
while (crnt < n) {
auto crntval = cache[crnt];
if (crntval.first == -1) {
found.insert(crnt);
auto j = ask(crnt);
crntval = { j[0], j[1] };
cache[crnt] = crntval;
}
int low = crnt, high = n - 1, ans = crnt;
for (int i : found) {
if (cache[i].second == crntval.second) {
low = max(low, i);
}
if (i > crnt && cache[i].second != crntval.second) {
high = min(high, i);
}
}
while (low <= high) {
int x = (low + high) / 2;
pair<int, int> qry = cache[x];
if (qry.first == -1) {
found.insert(x);
auto j = ask(x);
qry = { j[0], j[1] };
cache[x] = qry;
}
if (qry.second != crntval.second) {
high = x - 1;
}
else {
low = x + 1;
ans = x;
}
}
crnt = ans + 1;
while (crnt < n) {
auto qry = cache[crnt];
if (qry.first == -1) {
found.insert(crnt);
auto j = ask(crnt);
qry = { j[0], j[1] };
cache[crnt] = qry;
}
if (qry.first + qry.second == 0) return crnt;
if (qry.first + qry.second >= lolpop) break;
crnt++;
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
prize.cpp: In function 'int find_best(int)':
prize.cpp:71:1: warning: control reaches end of non-void function [-Wreturn-type]
71 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |