Submission #1031003

#TimeUsernameProblemLanguageResultExecution timeMemory
1031003coolboy19521The Big Prize (IOI17_prize)C++17
100 / 100
40 ms5764 KiB
#include "prize.h"
#include "iostream"
 
using namespace std;

const int sz = 2e5 + 10;

vector<int> bf[sz];

vector<int> Ask(int x) {
    if (bf[x].size()) return bf[x];
    return bf[x] = ask(x);
}
 
int find_best(int n) {
    int mx = 0, xx = 600;
    for (int i = 0; i < min(n, 600); i ++) {
        auto pr = Ask(i);
        mx = max(mx, pr[0] + pr[1]);
        if (0 == pr[0] + pr[1]) return i;
        if (30 < mx) {
            xx = i + 1;
            break;
        }
    }
    int ls = xx;
    while (ls < n) {
        int ps;
        for (; ls < n; ls ++) {
            auto pr = Ask(ls);
            int sm = pr[0] + pr[1];
            if (0 == sm) return ls;
            if (sm == mx) {
                ps = pr[1];
                break;
            }
        }
        int ds = xx;
        int rs = n;
        while (1 < rs - ds) {
            int mi = (ds + rs + 1) / 2;
            if (mi <= ls) {
                ds = mi;
                continue;
            }
            auto pr = Ask(mi);
            int sm = pr[0] + pr[1];
            if (0 == sm) return mi;
            if (sm != mx) rs = mi;
            if (0 == ps - pr[1]) ds = mi;
            else rs = mi;
        }
        ls = ds + 1;
    }
    return 0;
}

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:50:13: warning: 'ps' may be used uninitialized in this function [-Wmaybe-uninitialized]
   50 |             if (0 == ps - pr[1]) ds = mi;
      |             ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...