Submission #1226211

#TimeUsernameProblemLanguageResultExecution timeMemory
1226211VMaksimoski008Prisoner Challenge (IOI22_prison)C++17
30 / 100
26 ms2116 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;

//bit po bit
//1-13 ima vo A
//14-26 nema vo A
//27-39 ima vo B
//40-52 nema vo B
vector<vector<int>> devise_strategy(int n) {
    vector<vector<int> > ans(53, vector<int>(n+1));

    //ako vide 0 na table e base case
    //vidi 12 bit
    ans[0][0] = 0;
    for(int i=1; i<=n; i++) {
      if(i & (1 << 12)) ans[0][i] = 13;
      else ans[0][i] = 26;
    }

    //strategija za B
    for(int i=1; i<=26; i++) {
      ans[i][0] = 1;
      int on, val;
      on = (i <= 13);
      if(i <= 13) val = i - 1;
      else val = i - 14;

      for(int j=1; j<=n; j++) {
        bool b = j & (1 << val);
        if(on && !b) {
          ans[i][j] = -2;
        } else if(!on && b) {
          ans[i][j] = -1;
        } else {
          ans[i][j] = i + 26;
        }
      }
    }

    //strategija za A
    for(int i=27; i<=52; i++) {
      ans[i][0] = 0;
      if(i == 27 || i == 40) {
        for(int j=1; j<=n; j++) ans[i][j] = -1;
        continue;
      }

      int val;
      if(i < 40) val = i - 27;
      else val = i - 40;
      val--;
      // if(i == 52) cout << "nxt " << val << endl;

      for(int j=1; j<=n; j++) {
        bool b = j & (1 << val);
        if(b) {
          ans[i][j] = val + 1;
        } else {
          ans[i][j] = val + 14;
        }
      }
    }

    // for(int j=0; j<=n; j++) cout << ans[52][j] << " ";
    // cout << endl;

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...