Submission #1214570

#TimeUsernameProblemLanguageResultExecution timeMemory
1214570exoworldgdThe Big Prize (IOI17_prize)C++20
0 / 100
0 ms404 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
map<int,vector<int>> mp;
vector<int> q(int i) {
    if (mp.count(i)) return mp[i];
    return mp[i] = ask(i);
}
int dfs(int l, int r, int pl, int pr) {
    if (l > r) return -1;
    int m = l+(r-l)/2;
    vector<int> res = q(m);
    int cl=res[0], cr=res[1];
    if (!(cl+cr)) return m;
    if (cl+cr < pl+pr) {
        int ans = dfs(l,m-1,pl,cr);
        if (ans != -1) return ans;
        return dfs(m+1,r,cl,pr);
    }
    if (cl == pl) return dfs(m+1,r,cl,pr);
    return dfs(l,m-1,pl,cr);
}
int find_best(int n) {
    mp.clear();
    vector<int> lres = q(0), rres = q(n-1);
    if (!(lres[1]+lres[0])) return 0;
    if (!(rres[0]+rres[1] == 0)) return n-1;
    return dfs(1,n-2,lres[0],rres[1]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...