Submission #1223281

#TimeUsernameProblemLanguageResultExecution timeMemory
1223281brintonPrisoner Challenge (IOI22_prison)C++20
65 / 100
7 ms1096 KiB
#include "prison.h"

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> devise_strategy(int N) {
  int k = __lg(N);
  int m = 2*k;
  vector<vector<int>> ans(m+1,vector<int>(N+1));
  
  for(int see = 0;see <= m;see++){
    int current_bit = (see+1)/2;
    int nxt_bit = current_bit-1;
    if(nxt_bit < 0) nxt_bit = k;
    
    ans[see][0] = (k-nxt_bit)%2;// current looking at 0:A,1:B
    for(int bag = 1;bag <= N;bag++){
      int nv = ((1 << nxt_bit)&bag)!=0;
      int cv = ((1 << current_bit)&bag)!=0;
      if(see == 0){
        ans[see][bag] = 2*nxt_bit-nv;
        continue;
      }
      if(see%2 != cv){
        // got the answer;
        if((cv > see%2) == ans[see][0]){
          ans[see][bag] = -1;
        }else{
          ans[see][bag] = -2;
        }
      }else if(see <= 2){
        // must have the answer;
        if((bag&1) == ans[see][0]){
          ans[see][bag] = -1;
        }else{
          ans[see][bag] = -2;
        }
      }else{
        ans[see][bag] = 2*nxt_bit-nv;
      }
    }
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...