Submission #1230042

#TimeUsernameProblemLanguageResultExecution timeMemory
1230042inesfiPrisoner Challenge (IOI22_prison)C++20
38 / 100
28 ms2376 KiB
#include "prison.h" #include<bits/stdc++.h> using namespace std; #define ll long long struct Pos { int logec,etat; void afficher(){ cout<<logec<<" "<<etat<<endl; } }; const int OUI=1,NON=2,PAS_ENCORE=0,LOGMAXI=13; vector<vector<int>> strategie; Pos nb_vers_pos(int n){ Pos a; a.etat=n%3; a.logec=LOGMAXI-1-n/3; return a; } int pos_vers_nb(Pos p){ int a=0; a+=p.etat; a+=(LOGMAXI-1-p.logec)*3; return a; } vector<int> decomp(int n){ vector<int> a={}; while (n!=0){ a.push_back(n%2); n/=2; } while (a.size()<LOGMAXI){ a.push_back(0); } return a; } vector<vector<int>> devise_strategy(int N) { int nbpos=38; strategie.clear(); for (int i=0;i<=nbpos;i++){ vector<int> ajout={}; Pos nb=nb_vers_pos(i); if (nb.etat==PAS_ENCORE){ ajout.push_back(0); } else { ajout.push_back(1); } for (int j=1;j<=N;j++){ vector<int> binaire=decomp(j); if (nb.etat==PAS_ENCORE){ Pos nouv; if (binaire[nb.logec]==0){ nouv.etat=NON; } else { nouv.etat=OUI; } nouv.logec=nb.logec; ajout.push_back(pos_vers_nb(nouv)); } else { if (nb.etat==OUI){ if (binaire[nb.logec]==0){ ajout.push_back(-2); } else { if (nb.logec==0){ ajout.push_back(0); } else { ajout.push_back(pos_vers_nb({nb.logec-1,PAS_ENCORE})); } } } else { if (binaire[nb.logec]==1){ ajout.push_back(-1); } else { if (nb.logec==0){ ajout.push_back(0); } else { ajout.push_back(pos_vers_nb({nb.logec-1,PAS_ENCORE})); } } } } } strategie.push_back(ajout); } /*for (int i=0;i<=nbpos;i++){ for (int j=0;j<=N;j++){ cout<<strategie[i][j]<<" "; } cout<<endl; } nb_vers_pos(37).afficher();*/ return strategie; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...