#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |