Submission #374984

#TimeUsernameProblemLanguageResultExecution timeMemory
374984Alex_tz307동굴 (IOI13_cave)C++17
0 / 100
657 ms804 KiB
#include <bits/stdc++.h>
#include "cave.h"

using namespace std;

const int NMAX = 8192;
int states[NMAX], doors[NMAX], query_states[NMAX];
bool found[NMAX];

bool opens(int ans, int door) {
    if(ans == -1)
        return true;
    return ans > door;
}

void exploreCave(int N) {
    for(int i = 0; i < N; ++i) {
        bool colour = true;
        for(int j = 0; j < N; ++j)
            if(found[j])
                query_states[j] = states[j];
            else
                query_states[j] = 0;
        int ans = tryCombination(query_states);
        if(opens(ans, i))
            colour = false;
        int st = 0, dr = N - 1;
        while(st < dr) {
            int mid = (st + dr) >> 1;
            for(int j = 0; j < N; ++j)
                if(found[j])
                    query_states[j] = states[j];
                else
                    if(st <= j && j <= dr)
                        query_states[j] = colour;
                else
                    query_states[j] = colour ^ 1;
            int ans = tryCombination(query_states);
            if(opens(ans, i))
                dr = mid;
            else
                st = mid + 1;
        }
        found[st] = true;
        states[st] = colour;
        doors[st] = i;
    }
    answer(states, doors);
}
#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...