Submission #1284113

#TimeUsernameProblemLanguageResultExecution timeMemory
1284113talyCave (IOI13_cave)C++20
100 / 100
105 ms504 KiB
#include <bits/stdc++.h> #define pii pair<int, int> #define tii tuple<int, int, int> #define lli long long #define pb push_back using namespace std; #include "cave.h" void solve(int l, int r, int x, bool b, int s[], int d[]){//b=1 se a porta x já estava para baixo antes if(l==r){//só sobrou uma opção if(b==1)s[l]=1-s[l];//se o resultado deu x, é pq a porta x está fechada, então s[l] tem que ser 1 //se não deu igual a x é pq ela está aberta, então mantém 0; d[l]=x;//e o d[l] atualiso para x; return; } int mid = (l+r)/2; for (int i=l; i<=mid; i++){ if(d[i]==-1){//se ainda não encontrei resultado daquela porta... s[i]=1-s[i];//inverso metade dos interruptores } } int tc = tryCombination(s); //testo com metade invertida if(tc==x&&b==1){//se deu que a primeira fechada é o x e ele já estava fechado antes, então mudar a primeira metade não mudou o resultado solve(mid+1, r, x, 1, s, d);//logo, o botão do x está na segunda metade (a que não mudei nada) e na lista s o s[-] que guarda o do x está deixando o x fechado, b=1 }else if (tc==x&&b==0){//se deu q x está fechado mas antes ele tava aberto solve(l, mid, x, 1, s, d);//ele tá na metade que eu mudei e agora está fechado, b=1 }else if (tc!=x&&b==0){//se antes tava aberto e agora tbm, não mudou nada no x solve(mid+1, r, x, 0, s, d);//ele tá na metade que não mudei e está aberto, b=0; }else{//se estava antes fechado mas agora está aberto, mudou solve(l, mid, x, 0, s, d);//ele tá na metade que eu mudei e agora está aberto, b=0 } } void exploreCave(int n){ int s[n], d[n]; for (int i=0; i<n; i++){ d[i]=-1; s[i]=0; } int c = 0; for (int i=0; i<n; i++){//resolvo em ordem para garantir que ao testar uma combinação nova no solve não vai acotecer de uma porta com um i menor fechar na frente e eu não conseguir tem informações sobre o i que estou tentando achar int tc = tryCombination(s); if(tc==i){ solve(0, n-1, i, 1, s, d); }else{ solve(0, n-1, i, 0, s, d); } } 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...