#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
map<int,vector<int>>mp;
int N;
int cutoff;
vector<int>kask(int n){
if(n<0||n>=N){
return {0,0};
}
if(mp.find(n)!=mp.end()){
return mp[n];
}
return mp[n]=ask(n);
}
int locate(int x){
if(x<0||x>=N){
return x;
}
for(int i = 0;i<N;i++){
if(x+i<N&&kask(x+i)[0]+kask(x+i)[1]==cutoff){
return x+i;
}
if(x-i>=0&&kask(x-i)[0]+kask(x-i)[1]==cutoff){
return x-i;
}
}
}
int find_best(int n) {
mp.clear();
N=n;
cutoff=0;
for(int i = 0;i<min(n,474);i++){
if(kask(i)[0]+kask(i)[1]>cutoff){
cutoff=kask(i)[0]+kask(i)[1];
}
}
queue<array<int,3>>q;
q.push({0,n-1,cutoff});
while(!q.empty()){
array<int,3>a = q.front();
q.pop();
if(a[2]<=0)
continue;
if(abs(a[2]-(a[1]-a[0]))<=2){
for(int i = a[0];i<=a[1];i++){
if(kask(i)[0]+kask(i)[1]==0){
return i;
}
}
continue;
}
int l = locate(a[0]-1);
int r = locate(a[1]+1);
int mid = locate((l+r)/2);
q.push({l+1,mid-1,kask(mid)[0]-kask(l)[0]});
q.push({mid+1,r-1,kask(mid)[1]-kask(r)[1]});
}
return -1;
}
Compilation message (stderr)
prize.cpp: In function 'int locate(int)':
prize.cpp:32:1: warning: control reaches end of non-void function [-Wreturn-type]
32 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |