Submission #145744

#TimeUsernameProblemLanguageResultExecution timeMemory
145744MathStudent2002Cave (IOI13_cave)C++14
12 / 100
1453 ms512 KiB
#include "cave.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXM = 5005;

int M;
int pos[MAXM];
int loc[MAXM];
int cur;
int ex[MAXM];

void found(int known, int L, int R) {
    for(int x = 0; x < M; x++) {ex[x] = 1-known;}
    for(int x = L; x <= R; x++) {ex[x] = known;}
    for(int x = 0; x < cur; x++) {ex[loc[x]] = pos[x];}
}

void exploreCave(int N) {
    M = N;

    int check[M];

    for(int i = 0; i < M; i++) {pos[i] = -1; loc[i] = -1;}

    int curpos;
    int res;

    for(cur = 0; cur < M; cur++) {
        found(0, 0, M-1);
        for(int j = 0; j < M; j++) {
            check[j] = ex[j];
        }
        res = tryCombination(check);
        curpos = 0;
        if(res == cur) {curpos = 1;}
        pos[cur] = curpos;

        int lo = 0, hi = M-1;
        int mi;
        while(hi != lo) {
            mi = (lo+hi)/2;
            found(curpos,lo,mi);
            for(int j = 0; j < M; j++) {check[j] = ex[j];}
            res = tryCombination(check);
            if(res == cur) {lo = mi+1;}
            else hi = mi;
        }

        loc[cur] = lo;
    }

    int ansloc[M];
    int anspos[M];

    for(int i = 0; i < M; i++) {
        ansloc[i] = loc[i];
        anspos[loc[i]] = pos[i];
    }

    answer(anspos, ansloc);
}
#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...