Submission #1315840

#TimeUsernameProblemLanguageResultExecution timeMemory
1315840muramasaCave (IOI13_cave)C++20
0 / 100
512 ms532 KiB
#include "cave.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> filp(int S[],bool valid[],int N,int l,int r){
    vector<int> comb(N);
    for(int i = 0;i < N;i++){
        if(l <= i && i <= r){
            if(!valid[i])comb[i] = 1 - S[i];
            else comb[i] = S[i];
        }else comb[i] = S[i];
    }
    return comb;
}

void exploreCave(int N) {
    int S[N],D[N];
    for(int i = 0;i < N;i++)S[i] = 0;
    // for(int i = 0;i < N;i++)D[i] = 0;
    bool valid[N];
    for(int i = 0;i < N;i++)valid[i] = 0;
    for(int i = 0;i < N;i++){
        int p = tryCombination(S);
        bool f = 0;
        if(p == i)f = 1;
        int l = 0,r = N - 1,ans = -1;
        while(l < r){
            int m = (l + r)/2;
            vector<int> comb = filp(S,valid,N,l,m);
            int Ncomb[N];
            for(int j = 0;j < N;j++)Ncomb[j] = comb[j];
            int s = tryCombination(Ncomb);
            if(f){
                if(p != i)r = m;
                else l = m + 1;
            }else{
                if(p == i)r = m;
                else l = m + 1;
            }
        }
        D[l] = i;
        if(f)S[l] = 1 - S[l];
        valid[l] = 1;
    }
    answer(S,D);
    // return;
}
#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...