Submission #1214670

#TimeUsernameProblemLanguageResultExecution timeMemory
1214670hgmhcCave (IOI13_cave)C++20
100 / 100
161 ms500 KiB
#include "cave.h"
#include <cassert>

int S[5000];
int D[5000];
bool fixed[5000];

bool pre;
bool ok(int l, int r, int i) {
    for(int i=l; i<=r; ++i) if(!fixed[i]) S[i] ^= 1;
    bool cur = tryCombination(S)==i;
    for(int i=l; i<=r; ++i) if(!fixed[i]) S[i] ^= 1;
    return pre != cur;
}

void exploreCave(int n) {
    for(int i=0; i<n; ++i) {
        int x=0, y=n-1, z;
        pre = tryCombination(S)==i;
        while(x<y) {
            z=(x+y)>>1;
            if(ok(x,z,i)) y=z;
            else x=z+1;
        }
        assert(x==y);
        D[x] = i;
        fixed[x] = true;
        if (pre) S[x] ^= 1;
    }
    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...