제출 #1305695

#제출 시각아이디문제언어결과실행 시간메모리
1305695AzeTurk810동굴 (IOI13_cave)C++20
100 / 100
335 ms1136 KiB
#include "cave.h"
#include <cassert>
#include <iostream>
#include <vector>

void exploreCave(int N) {
    int ans[N] , have[N];
    int S[N] , D[N] , res = 0;
    std::vector< int > A;
    for(int i = 0;i < N;i++)
        S[i] = D[i] = 0;
    for(int i = 0;i < N;i++) 
        D[i] = -1;
    for(int i =0 ;i < N;i++) {
        A.push_back(i);
        bool t = tryCombination(S) == i;
        int l = 0, r =N - 1, mid;
        res = -1;
        while (l <= r) {
            std::cerr << l << ' ' << r << std::endl;
            mid = (l + r) >> 1;
            for(int j = l;j <= mid;j++) {
                if(D[j] == -1) {
                    S[j] = 1 - S[j];
                }
            }
            if((tryCombination(S) == i) == t) {
                l = mid + 1;
            } else {
                res = mid;
                r = mid - 1;
            }
            for(int j = l;j <= mid;j++) {
                if(D[j] == -1) 
                    S[j] = 1 - S[j];
            }
        }
        if(res == -1) {
            res = l -1;
        }
        assert(res != -1);
        if(t) 
            S[res] = 1 - S[res];
        D[res] = i;
    }
    answer(S , D);
}
#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...