제출 #1008313

#제출 시각아이디문제언어결과실행 시간메모리
1008313oyberPrisoner Challenge (IOI22_prison)C++17
60 / 100
8 ms1116 KiB
#include "prison.h"

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

/*
void print_strat(vector<vector<int>> s) {
  for (int i = 0; i < int(s.size()); i++) {
    int counter = i >> 1;
    int other = i & 1;
    int bag = s[i][0];
    for (int j = 1; j <= N; j++) {
    }
  }
}*/

vector<vector<int>> devise_strategy(int N) {
  int n = 13*2;
  vector<vector<int>> s(n);

  for (int i = 2; i < n; i++) {
    //printf("i: %d\n", i);
    s[i].resize(N+1);

    int counter = i >> 1;
    int other = i & 1;

    int bag = counter % 2;
    s[i][0] = bag;

    //printf("i: %d counter: %d other: %d bag: %d\n", i, counter, other, bag);

    for (int j = 1; j <= N; j++) {
      //if (j != 4090 && j != 4096) continue;
      //printf("j: %d ", j);
      int bit = (j & (1 << counter)) > 0;
      if (bit == other) {
        if (counter == 1) {
          int last_bit = j & 1;
          int lowest = bag;
          if (last_bit == 1) lowest = !bag;
          s[i][j] = -(lowest+1);
          //printf("lowest: %d\n", lowest);
        } else {
          int new_counter = counter-1;
          int new_other = (j & (1 << new_counter)) > 0;
          s[i][j] = (new_counter << 1) + new_other;
          //printf("counter: %d other: %d\n", new_counter, new_other);
        }
      } else {
        int lowest = bag;
        if (other < bit) lowest = !lowest;
        s[i][j] = -(lowest+1);
        //printf("lowest: %d\n", lowest);
      }
    }
  }

  s[0].resize(N+1);
  s[1].resize(N+1);

  int counter = (n-1) >> 1;
  int bag = !(counter % 2);
  s[0][0] = bag;
  for (int j = 1; j <= N; j++) {
    int bit = (j & (1 << counter)) > 0;
    s[0][j] = (counter << 1) + bit;
  }

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