Submission #1302111

#TimeUsernameProblemLanguageResultExecution timeMemory
1302111timeflewCave (IOI13_cave)C++20
100 / 100
159 ms520 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int mxN=5e3;

bool vis[mxN];
int s[mxN], an[mxN];

void change(int i, int j) {
    for(int pos=i; pos<=j; pos++) {
        if(vis[pos])
            continue;
        s[pos]=!s[pos];
    }
}

void exploreCave(int N) {
    for(int i=0; i<N; i++) {
        int l=0, r=N-1, final_pos=0;
        int sign=tryCombination(s)==i?0:1;
        // cout<<"round "<<i<<" sign"<<sign<<" tryCombination"<<tryCombination(s)<<endl;
        while(l<=r) {
            int mid=(l+r)/2;
            change(l, mid);
            int res=(tryCombination(s)==i?0:1);
            // cout<<"l mid res"<<l<<' '<<mid<<' '<<res<<endl;            
            change(l, mid);
            if(res!=sign)
                final_pos=mid, r=mid-1;
            else
                l=mid+1;
        }
        // cout<<i<<"final_pos"<<' '<<final_pos<<endl;
        vis[final_pos]=1;
        an[final_pos]=i;
        s[final_pos]=!sign;
    }
    answer(s, an);
}
#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...