제출 #1340914

#제출 시각아이디문제언어결과실행 시간메모리
1340914aritro_동굴 (IOI13_cave)C++20
100 / 100
219 ms600 KiB
#include<bits/stdc++.h>
#include "cave.h"
using namespace std;

typedef long long ll;
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

int n;
const int maxN=5000 + 15;
int a[maxN],b[maxN];
int con[maxN];

int tryCombination(int s[]);
void answer(int S[],int D[]);
bool open(int *p, int &k){
    int a=tryCombination(p);
    if(a==-1||a>k) return 1;
    return 0;
}

void exploreCave(int n){
    int s[n],d[n],ans[n];
    for(int i=0;i<n;i++) s[i]=-1;
    for(int i=0;i<n;i++){
        vector<int> c;
        for(int i=0;i<n;i++) if(s[i]==-1) c.push_back(i);
        int p[n];
        for(int i=0;i<n;i++){
            if(s[i]==-1) p[i]=0;
            else p[i]=s[i];
        }
        if(open(p,i)) ans[i]=0;
        else ans[i]=1;
        int st=0,end=c.size()-1,mid;
        while(st<end){
            for(auto x:c) p[x]=ans[i]^1;
            mid=(st+end)/2;
            for(int j=st;j<=mid;j++) p[c[j]]=ans[i];
            if(open(p,i)) end=mid;
            else st=mid+1;
        }
        d[c[st]]=i;
        s[c[st]]=ans[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...