Submission #470139

#TimeUsernameProblemLanguageResultExecution timeMemory
470139Newtech66Cave (IOI13_cave)C++17
100 / 100
1122 ms548 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;

int recurse(vector<int>& guess,int pos,const vector<int>& door,const vector<int>& setting,int l,int r,int N) //in [l,r)
{
    if(r-l==1)    return l;
    int mid=l+(r-l)/2;
    fill(guess.begin()+l,guess.begin()+mid,1);
    for(int i=0;i<N;i++)
    {
        if(door[i]!=-1)
        {
            guess[door[i]]=setting[i];
        }
    }
    int next=tryCombination(guess.data());
    if(next==pos)
    {
        if(setting[pos]==0)
        {
            fill(guess.begin()+l,guess.begin()+mid,0);
            return recurse(guess,pos,door,setting,l,mid,N);
        }else
        {
            return recurse(guess,pos,door,setting,mid,r,N);
        }
    }else
    {
        if(setting[pos]==0)
        {
            return recurse(guess,pos,door,setting,mid,r,N);
        }else
        {
            fill(guess.begin()+l,guess.begin()+mid,0);
            return recurse(guess,pos,door,setting,l,mid,N);
        }
    }
}

void exploreCave(int N) {
    vector<int> door(N,-1),setting(N,-1);
    for(int i=0;i<N;i++)
    {
        vector<int> guess(N);
        fill(guess.begin(),guess.end(),0);
        for(int i=0;i<N;i++)
        {
            if(door[i]!=-1)
            {
                guess[door[i]]=setting[i];
            }
        }
        //for(auto& e:guess)  cout<<e<<" ";
        //cout<<endl;
        int next=tryCombination(guess.data());
        //cout<<i<<" "<<next<<endl;
        setting[i]=(next==i);
        door[i]=recurse(guess,i,door,setting,0,N,N);
    }
    vector<int> invdoor(N),invset(N);
    for(int i=0;i<N;i++)
    {
        invdoor[door[i]]=i;
        invset[door[i]]=setting[i];
    }
    answer(invset.data(),invdoor.data());
}
#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...