Submission #1181373

#TimeUsernameProblemLanguageResultExecution timeMemory
1181373madamadam3Prisoner Challenge (IOI22_prison)C++20
5 / 100
4 ms840 KiB
#include "prison.h"
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;
using vvi = vector<vi>;

int encode(bool checkB, int valueAtBit, int bitToCheck) {
  int ans = 0;
  ans |= ((checkB ? 1 : 0) << 6);
  ans |= (valueAtBit << 5);
  ans |= bitToCheck;

  return ans;
}

void decode(int encoded) {
  bool checkB = encoded & (1 << 6);
  int valueAt = (encoded & (1 << 5) ? 1 : 0);
  int curBit = encoded & ((1 << 4) - 1);

  cout << "We are checking the value of: " << (checkB ? "B" : "A") << "\n";
  cout << "Bit " << curBit << " of " << (checkB ? "A[i] ^ B[i] " : "A[i]") << "is " << valueAt << "\n";
}

vvi devise_strategy(int N) {
  int X = 128;
  vvi s(X+1, vi(N+1, 0));

  /*
    idea: prisoner by prisoner go through the bits of A and B
    state = [done 2] [a[i] ^ b[i]] [i] = 6 bits
  */
  
  for (int i = 0; i <= X; i++) {
    // if we are told to check A, then value of checkbit is A[i], and i is new
    int checkB = i & (1 << 6);
    int vat = (i & (1 << 5) ? 1 : 0);
    int curBit = 15 - (i & ((1 << 4) - 1)); 

    bool newCheckB = !checkB;
    int newCurBit = checkB ? (i & ((1 << 4) - 1)) + 1 : (i & ((1 << 4) - 1));
    s[i][0] = checkB ? 1 : 0;
    
    for (int j = 1; j <= N; j++) {
      int bitAt = (j & (1 << (15 - newCurBit))) ? 1 : 0;
      if (newCheckB) {
        if (bitAt != vat) {
          s[i][j] = bitAt == 1 ? -2 : -1;
        } else {
          s[i][j] = 0 | (newCheckB << 6) | (newCurBit) | ((bitAt ^ vat) << 5);
        }
      } else {
        s[i][j] = 0 | (newCheckB << 6) | (newCurBit) | (bitAt << 5);
      }
    }
  }

  for (int i = 0; i <= X; i++) {
    // cout << "i = " << i << ": [" << s[i][0];
    // for (int j = 1; j <= N; j++) {
    //   cout << ", " << s[i][j];
    // }
    // for (int j = 0; j <= N; j++) {
    //   if (!(-2 <= s[i][j] && s[i][j] <= X)) {
    //     cout << "s[" << i << "][" << j << "] is wrong!!\n";
    //   }
    // }
    // cout << "]\n";
  }
  return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...