Submission #666239

#TimeUsernameProblemLanguageResultExecution timeMemory
666239peijarPrisoner Challenge (IOI22_prison)C++17
65 / 100
14 ms1164 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> devise_strategy(int N) {
  int nbBits = max(10, (int)log2(N - 1) + 1);
  int B = nbBits - 1;
  int k = 2 * B + 1;
  cerr << k << endl;
  vector<vector<int>> strategy(k, vector<int>(N + 1));

  for (int i = 0; i < k; ++i) {
    if (i == 0) {
      strategy[i][0] = !((nbBits - 1) % 2);
      for (int j = 0; j < N; ++j) {
        if ((1 << (nbBits - 1)) & j)
          strategy[i][j + 1] = B + B;
        // strategy[i][j + 1] = nbBits + 1 + (nbBits - 1) - 2;
        else
          strategy[i][j + 1] = B;
        // strategy[i][j + 1] = 1 + (nbBits - 1) - 2;
      }
    } else {
      int bit = i <= B ? i : i - B;
      int big = i > B;
      strategy[i][0] = bit % 2;
      for (int j = 0; j < N; ++j) {
        if (big != !!((1 << bit) & j)) {
          if (big)
            strategy[i][j + 1] = -1 - bit % 2;
          else
            strategy[i][j + 1] = -2 + bit % 2;
        } else {
          if (bit == 1) {
            if (j % 2)
              strategy[i][j + 1] = -2 + bit % 2;
            else
              strategy[i][j + 1] = -1 - bit % 2;
          } else {
            assert(bit > 1);
            if ((1 << (bit - 1)) & j)
              strategy[i][j + 1] = B + bit - 1;
            else
              strategy[i][j + 1] = bit - 1;
          }
        }
      }
    }
  }
  return strategy;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...