제출 #63694

#제출 시각아이디문제언어결과실행 시간메모리
63694MKopchev동굴 (IOI13_cave)C++14
12 / 100
895 ms768 KiB
#include<bits/stdc++.h>
#include "cave.h"
const int nmax=5e3+42;
int which[nmax];
int sign[nmax];
int now[nmax];
int active[nmax],sz=0;
void exploreCave(int N)
{
    memset(which,-1,sizeof(which));
    for(int i=0;i<N;i++)//find the i-th
    {
        sz=0;
        for(int j=0;j<N;j++)
            if(which[j]!=-1)now[which[j]]=sign[j];
        for(int j=i;j<N;j++)
        {
        sz++;
        active[sz]=j;
        now[j]=0;
        }
        int ans=tryCombination(now);
        bool sign_now;
        assert(ans==-1||ans>=i);
        if(ans==-1||ans>i)sign_now=0;
        else sign_now=1;
        while(sz>1)
        {
            int mx=sz/2,pos=1;
            for(int j=0;j<N;j++)
                if(which[j]!=-1)now[which[j]]=sign[j];

            for(int j=i;j<N;j++)
                {
                if(pos<=mx&&active[pos]==j)now[j]=sign_now,pos++;
                else now[j]=!sign_now;
                }
            int ans=tryCombination(now);
            assert(ans==-1||ans>=i);
            if(ans==-1||ans>i)sz=mx;
            else
            {
                for(int j=mx+1;j<=sz;j++)
                    active[j-mx]=active[j];
                sz=sz-mx;
            }
        }
        sign[active[1]]=sign_now;
        which[active[1]]=i;
    }
    answer(sign,which);
}
#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...