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<bits/stdc++.h>
using namespace std;
#include "prize.h"
#define pb push_back
#define sz(a) (int)((a).size())
const vector<int> good = {0, 0};
constexpr int maxn = 2e5;
int base;
int solve(vector<int>& v, int l, int r) {
if(!sz(v)) return -1;
// printf("l, r == %d %d\n", l, r);
// for(int x : v)
// printf("%d ", x);
// printf("\n");
int m = sz(v)/2;
vector<int> a, b;
for(int i = 0; i < m; i++)
a.pb(v[i]);
vector<int> res = ask(v[m]);
if(res == good) return v[m];
if(res[0]+res[1] == base) {
// printf("v %d\n", v[m]);
for(int i = m; i < sz(v); i++)
b.pb(v[i]);
if(res[0] - l) {
int ans = solve(a, l, res[1]);
if(ans != -1) return ans;
}
if(r - res[1]) {
int ans = solve(b, res[0], r);
if(ans != -1) return ans;
}
} else {
int seen = 1;
int p = v[m]+1;
while(p <= v.back()) {
// printf("p %d\n", p);
res = ask(p);
if(res == good) return p;
if(res[0]+res[1] == base) {
for(int i = p+1; i <= v.back(); i++)
b.pb(i);
if(res[0] - l - seen) {
int ans = solve(a, l, res[1]+seen);
if(ans != -1) return ans;
}
if(r - res[1]) {
int ans = solve(b, res[0], r);
if(ans != -1) return ans;
}
}
++p, ++seen;
}
}
return -1;
}
int find_best(int n) {
int last = 0;
// base = 3;
for(int i = 0; i < min(475, n); i++) {
vector<int> opa = ask(i);
if(opa == good) return i;
if(opa[0]+opa[1] >= base)
base = opa[0]+opa[1];
}
vector<int> a;
for(int i = 0; i < n; i++)
a.pb(i);
return solve(a, 0, 0);
}
Compilation message (stderr)
prize.cpp: In function 'int find_best(int)':
prize.cpp:63:6: warning: unused variable 'last' [-Wunused-variable]
63 | int last = 0;
| ^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |