Submission #441138

#TimeUsernameProblemLanguageResultExecution timeMemory
441138lLab_동굴 (IOI13_cave)C++14
13 / 100
52 ms65540 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;

int n;
int sol(int A[], int s, int e, int tar){
    if(s>e) return -1;
    int B[n];
    int mid = (s+e)/2;
    for(int i=0;i<n;++i){
        B[i] = A[i];
    }
    for(int i=mid;i<e;++i){
        B[i] = (B[i]+1)%2;
    }
    int res = tryCombination(B);
    if(s==e){
        if(res > tar || res == -1){
            return s;
        }else{
            return -1;
        }
    }
    if(res > tar || res == -1){
        return sol(A, mid, e, tar);
    }else{
        while(res <= tar){
            int p = sol(A, 0, n-1, res);
            B[p] = (B[p]+1)%2;
            res = tryCombination(B);
            B[p] = (B[p]+1)%2;
            if(res > tar) return p;
        }
        return -1;
    }
}

void exploreCave(int N) {
    n = N;
    int B[N], door[N];
    for(int i=0;i<N;++i){
        B[i] = 0;
        door[i] = i;
    }
    int res = 0;
    while(res != -1){
        res = tryCombination(B);
        if(res == -1) break;
        int p = sol(B,0,N-1,res);
        if(p == -1){
            answer(B,door);
            return ;
        }
        B[p] = (B[p]+1)%2;
    }

    for(int i=0;i<N;++i){
        B[i] = (B[i]+1)%2;
        door[i] = tryCombination(B);
        B[i] = (B[i]+1)%2;
    }
    answer(B,door);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...