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