Submission #1339401

#TimeUsernameProblemLanguageResultExecution timeMemory
1339401fahmid_rngCave (IOI13_cave)C++20
100 / 100
117 ms516 KiB
#include<bits/stdc++.h>
#include "cave.h"
using namespace std;
bool open(int s[], int i){
    int t=tryCombination(s);
    if(t==-1||t>i) return 1;
    return 0;
}
void exploreCave(int n) {
    int s[n]={0},door[n],d[n];
    iota(door,door+n,0);
    for(int i=0;i<n;++i){
        for(int j=i;j<n;++j) s[door[j]]=0;
        int low=i,high=n;
        bool state=!open(s,i),prev=0;
        while(high-low>1){
            int mid=(low+high)/2;
            //[low,high-1] range in prev state
            //[low, mid-1]->state  [mid,high]->!state
            if(prev==state) for(int k=mid;k<high;++k) s[door[k]]=!state;
            else for(int k=low;k<mid;++k) s[door[k]]=state;
            if(open(s,i)) {high=mid; prev=state;}
            else {low=mid; prev=!state;}
        }
        swap(door[i],door[low]);
        s[door[i]]=state;
    }
    for(int i=0;i<n;++i) d[door[i]]=i;
    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...