제출 #974675

#제출 시각아이디문제언어결과실행 시간메모리
974675ivazivaCave (IOI13_cave)C++14
100 / 100
315 ms892 KiB
#include <bits/stdc++.h>
#include "cave.h"

using namespace std;

#define MAXN 5010

int pozicija[MAXN];
int vrata[MAXN];
bool pronadjeno[MAXN];
vector<long long> nepronadjeni;

void exploreCave(int N)
{
    for (long long i=0;i<N;i++) pozicija[i]=0;
    for (long long i=0;i<N;i++) pronadjeno[i]=false;
    for (long long i=0;i<N;i++) vrata[i]=-1;
    for (long long i=0;i<N;i++)
    {
        for (long long j=0;j<N;j++)
        {
            if (pronadjeno[j]) continue;
            else nepronadjeni.push_back(j);
        }
        long long ans0=tryCombination(pozicija);
        if (ans0<=i and ans0!=-1)
        {
            long long l=0,r=nepronadjeni.size()-1;
            long long rez=-1;
            while (l<=r)
            {
                long long mid=(l+r)/2;
                for (long long j=0;j<=mid;j++) pozicija[nepronadjeni[j]]=1-pozicija[nepronadjeni[j]];
                long long ans=tryCombination(pozicija);
                if (ans>i or ans==-1) {rez=mid;r=mid-1;}
                else l=mid+1;
                for (long long j=0;j<=mid;j++) pozicija[nepronadjeni[j]]=1-pozicija[nepronadjeni[j]];
            }
            pozicija[nepronadjeni[rez]]=1;
            vrata[nepronadjeni[rez]]=i;
            pronadjeno[nepronadjeni[rez]]=true;
        }
        else
        {
            long long l=0,r=nepronadjeni.size()-1;
            long long rez=-1;
            while (l<=r)
            {
                long long mid=(l+r)/2;
                for (long long j=0;j<=mid;j++) pozicija[nepronadjeni[j]]=1-pozicija[nepronadjeni[j]];
                long long ans=tryCombination(pozicija);
                if (ans==i) {rez=mid;r=mid-1;}
                else l=mid+1;
                for (long long j=0;j<=mid;j++) pozicija[nepronadjeni[j]]=1-pozicija[nepronadjeni[j]];
            }
            vrata[nepronadjeni[rez]]=i;
            pronadjeno[nepronadjeni[rez]]=true;
        }
        nepronadjeni.clear();
    }
    answer(pozicija,vrata);
}
#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...