Submission #1230245

#TimeUsernameProblemLanguageResultExecution timeMemory
1230245inesfiPrisoner Challenge (IOI22_prison)C++20
0 / 100
0 ms324 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;

pos nb_vers_pos(int n){
    pos a;
    a.etat=n%3;
    a.logec=n/3;
    return a;
}

int pos_vers_nb(pos n){
    int a;
    a=n.etat;
    a+=n.logec*3;
    return a;
}

void decomp(int n){
    binaire.clear();
    while (n!=0){
        binaire.push_back(n%3);
        n/=3;
    }
    while (binaire.size()!=LOGMAXI){
        binaire.push_back(0);
    }
    reverse(binaire.begin(),binaire.end());
}

vector<vector<int>> devise_strategy(int N) {
    int nbpos=24;
    for (int i=0;i<=nbpos;i++){
        vector<int> ajout={};
        pos act=nb_vers_pos(i);
        if (act.etat==0 and act.logec==0){
            ajout.push_back(0);
        }
        else {
            if (act.logec%2==0){
                ajout.push_back(1);
            }
            else {
                ajout.push_back(0);
            }
        }
        for (int j=1;j<=N;j++){
            decomp(j);
            if (act.etat==0 and act.logec==0){
                ajout.push_back(pos_vers_nb({0,binaire[0]}));
            }
            else if (act.etat==binaire[act.logec]){
                if (act.logec==LOGMAXI-1){
                    ajout.push_back(0);
                }
                else {
                    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...