Submission #562973

#TimeUsernameProblemLanguageResultExecution timeMemory
562973DeepessonCave (IOI13_cave)C++17
100 / 100
396 ms656 KiB
#include <bits/stdc++.h>
#include "cave.h"

#define MAX 5005
int tryCombination(int S[]);
void answer(int S[], int D[]);
void exploreCave(int N);


bool skip[MAX];
bool padrao[MAX];
int relacao[MAX];
int n;
int tentar(int l=-1,int r=-1){
    int combinacao[n];
    for(int i=0;i!=n;++i)combinacao[i]=padrao[i];
    if(l!=-1){
        for(int j=l;j<=r;++j){
            if(skip[j])continue;
            ///Ativar chave
            combinacao[j]=1;
        }
    }
    return tryCombination(combinacao);
}
int lessthan(int la,int ra,int obj){
    if(la==ra){
        return la;
    }
    int m = (la+ra)/2;
    int x = tentar(la,m);
    if(x<=obj&&x!=-1){
        return lessthan(la,m,obj);
    }else return lessthan(m+1,ra,obj);
}
int atleast(int la,int ra,int obj){
    if(la==ra){
        return la;
    }
    int m = (la+ra)/2;
    int x = tentar(la,m);
    if(x>obj||x==-1){
        return atleast(la,m,obj);
    }else return atleast(m+1,ra,obj);
}
void exploreCave(int N) {
    n=N;
    for(int i=0;i!=N;++i){
        int val = tentar();
        int ind=-1;
        int esperado=-1;

        if(val>i||val==-1){///Tentar botar o valor para i-1 (Garantido que 1 eh a chave primaria)
            esperado=0;
            ind = lessthan(0,N-1,i);
        }else {///Tentar botar o valor para pelo menos i (Garantido que 0 eh a chave primaria)
            esperado=1;
            ind = atleast(0,N-1,i);
        }


        skip[ind]=true;

        padrao[ind]=esperado;

        relacao[ind]=i;
    }
    int ans1[N],ans2[N];
    for(int i=0;i!=N;++i){
        ans1[i]=padrao[i];
        ans2[i]=relacao[i];
    }
    answer(ans1,ans2);
}
#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...