제출 #1347904

#제출 시각아이디문제언어결과실행 시간메모리
1347904win동굴 (IOI13_cave)C++20
100 / 100
116 ms528 KiB
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;

const int N = 5050;
int a[N],bi[N],ci[N];

int ask() {
    int res = tryCombination(a);
    if (res == -1) return 2e9;
    return res;
}

void dbg() { cout << "\n"; }
template<typename H, typename... T>
void dbg(H h, T... t) {
    cout << h << " ";
    dbg(t...);
}

void exploreCave(int n) {
    memset(bi,-1,sizeof(bi));
    for (int i = 0; i < n; i++) {
        int b = 0;
        for (int j = 0; j < n; j++) {
            if (bi[j] != -1) {
                a[j] = bi[j];
                continue;
            }
            a[j] = b;
        }
        if (ask() > i) b = 1;
        for (int j = 0; j < n; j++) {
            if (bi[j] != -1) {
                a[j] = bi[j];
                continue;
            }
            a[j] = b;
        }
        int l = 0, r = n-1;
        while (l < r) {
            int mid = (l+r)/2;
            for (int j = l; j <= mid; j++) {
                if (bi[j] != -1) continue;
                a[j] = 1-b;
            }
            int x = ask();
            for (int j = l; j <= mid; j++) {
                if (bi[j] != -1) continue;
                a[j] = b;
            }
            if (x > i) r = mid;
            else l = mid+1;
        }
        bi[l] = 1-b;
        ci[l] = i;
        // dbg("switch = ",l,"door = ",i,"bit = ",1-b);
    }
    // for (int i = 0; i < n; i++) cout << bi[i] << " ";
    // cout << "\n";
    // for (int i = 0; i < n; i++) cout << ci[i] << " ";
    answer(bi,ci);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...