제출 #1164736

#제출 시각아이디문제언어결과실행 시간메모리
1164736SmuggingSpun커다란 상품 (IOI17_prize)C++20
97.50 / 100
22 ms11380 KiB
#include<bits/stdc++.h>
#include "prize.h"
using namespace std;
const int SIZE = 495;
int find_best(int n) {
    vector<vector<int>>cnt(n, vector<int>(2, -1));
    auto id = [&] (int i){
        if(cnt[i][0] != -1){
            return cnt[i];
        }
        return cnt[i] = ask(i);
    };
    auto sum = [&] (int i){
        return id(i)[0] + id(i)[1];
    };
    auto same = [&] (int i, int j){
        return sum(i) == sum(j);
    };
    int ans = -1;
    if(sum(0) == 0){
        return 0;
    }
    if(sum(n - 1) == 0){
        return n - 1;
    }
    queue<pair<int, int>>q;
    q.emplace(1, n - 2);
    while(true){
        auto [l, r] = q.front();
        q.pop();
        if(l > r || (same(l - 1, r + 1) && id(r + 1)[0] - id(l - 1)[0] == 0)){
            continue;
        }
        int m = (l + r) >> 1;
        if(sum(m) == 0){
            return m;
        }
        q.emplace(l, m - 1);
        q.emplace(m + 1, r);
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...