Submission #1230311

#TimeUsernameProblemLanguageResultExecution timeMemory
1230311inesfiPrisoner Challenge (IOI22_prison)C++20
80 / 100
9 ms1604 KiB
#include "prison.h" #include<bits/stdc++.h> using namespace std; #define ll long long struct pos { int logec,etat; void afficher(){ cout<<"log "<<logec<<" etat "<<etat<<endl; } }; const int LOGMAXI=8; vector<vector<int>> strategie; vector<int> binaire; int nbpos; pos nb_vers_pos(int n){ if (n==nbpos){ return {n/3,1}; } n--; return {n/3,n%3}; } int pos_vers_nb(pos n){ return n.etat+n.logec*3+1; } void decomp(int n){ binaire.clear(); for (int i=0;i<LOGMAXI;i++) { binaire.push_back(n%3); n/=3; } reverse(binaire.begin(),binaire.end()); } vector<vector<int>> devise_strategy(int N) { nbpos=22; strategie.clear(); for (int i=0;i<=nbpos;i++){ vector<int> ajout={}; pos act=nb_vers_pos(i); if (i==0){ ajout.push_back(0); } else { ajout.push_back((act.logec+1)%2); } for (int j=1;j<=N;j++){ decomp(j); if (i==0){ ajout.push_back(pos_vers_nb({0,binaire[0]})); } else if (act.etat==binaire[act.logec]){ if (act.logec==LOGMAXI-2){ if (binaire[act.logec+1]==0){ ajout.push_back(-2); } else if (binaire[act.logec+1]==2){ ajout.push_back(-1); } else { ajout.push_back(nbpos); } } else if (act.logec==LOGMAXI-1){ ajout.push_back(0); } else { //cout<<pos_vers_nb({act.logec+1,binaire[act.logec+1]})<<endl; ajout.push_back(pos_vers_nb({act.logec+1,binaire[act.logec+1]})); } } else { if (act.etat<binaire[act.logec]){ if (act.logec%2==0){ ajout.push_back(-1); } else { ajout.push_back(-2); } } else { if (act.logec%2==0){ ajout.push_back(-2); } else { ajout.push_back(-1); } } } } 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(21).afficher(); return strategie; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...