Submission #907613

#TimeUsernameProblemLanguageResultExecution timeMemory
907613vjudge1Prisoner Challenge (IOI22_prison)C++17
10 / 100
9 ms1116 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define F first
#define S second
#define pb push_back
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;


const int BITS = 12;
const int A = -1;
const int B = -2;

int ID(int bit, int state){
  if(bit==-1) return 0;
  bit=BITS-bit;
  assert(bit*2-state >= 0);
  assert(bit*2-state < 2*BITS+1);
  return bit*2-state;
}

std::vector<std::vector<int>> devise_strategy(int N) {
  vector<vi> strat(2*BITS+1, vi(N+1,0));
  for(int b = BITS; b>=0; b--){
    rep(s,0,2){
      if(b==BITS && s==1) continue;
      strat[ID(b,s)][0] = (BITS-b)%2;
      rep(o,1,N+1){
        if(o&(1<<b)){
          if(s || b==BITS){
            strat[ID(b,s)][o]=ID(b-1, (o&(1<<(b-1)))>0);
          }else{
            strat[ID(b,s)][o]=(BITS-b)%2==0?B:A;
          }
        }else{
          if(s){
            strat[ID(b,s)][o]=(BITS-b)%2==0?A:B;
          }else{
            strat[ID(b,s)][o]=ID(b-1, (o&(1<<(b-1)))>0);
          }
        }
      }
      // cout<<b<<" "<<s<<" ("<<ID(b,s)<<"):";
      // rep(j,0,N+1) cout<<' ' << strat[ID(b,s)][j];
      // cout<<endl;
    }
  }
  return strat;
}


// int main(){
//   devise_strategy(5000);
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...