Submission #1142926

#TimeUsernameProblemLanguageResultExecution timeMemory
1142926turskaCave (IOI13_cave)C++20
100 / 100
1714 ms1204 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
const int maxN = 5000;
int S[maxN];
int D[maxN];

int prv;
set<int> full;
void solve(set<int> a) {
    if (a.size()==1) {
        int i = *a.begin();
        S[i] = 1;
        int cur = tryCombination(S);
        if (cur!=-1 && cur<prv) S[i] = 0;

        if (cur==-1) prv = -1;
        else prv = max(prv, cur);

        full.erase(i);
        return;
    }
    set<int> b;
    while (a.size()>b.size()) {
        b.insert(*a.begin());
        a.erase(a.begin());
    }
    for (auto i: a) {
        S[i] = 1;
    }
    int res = tryCombination(S);
    for (auto i: a) {
        S[i] = 0;
    }
    if (res!=prv) solve(a);
    else solve(b);
}
void exploreCave(int N) {
    prv = tryCombination(S);
    for (int i=0; i<N; i++) full.insert(i);
    while (prv!=-1) {
        solve(full);
    }
    for (int i=0; i<N; i++) {
        S[i] ^= 1;
        D[i] = tryCombination(S);
        S[i] ^= 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...