제출 #628332

#제출 시각아이디문제언어결과실행 시간메모리
628332c28dnv9q3죄수들의 도전 (IOI22_prison)C++17
10 / 100
4 ms468 KiB
#include "prison.h"
#include <vector>
#include <cstdio>

using namespace std;

struct State {
  int bitn;
  int isset;
};

int N;

int encode(State s) {
  int v = (s.bitn << 1) | (s.isset << 0);
  // printf("%d %d\n", s.bitn, v);
  return v + 1;
}
State decode(int v) {
  State s;
  v--;
  s.isset = (v >> 0) & 1;
  s.bitn = v >> 1;
  return s;
}

vector<vector<int>> devise_strategy(int N) {
  ::N = N;
  int Q = 18;
  vector<vector<int>> s(Q+1, vector<int>(N+1));
  
  s[0][0] = 0; // inspect bag A
  for (int i = 1; i <= N; i++) {
    State p{};
    p.bitn = 8;
    p.isset = (i & (1 << p.bitn)) ? 1 : 0;
    s[0][i] = encode(p);
  }
  
  for (int i = 1; i < s.size(); i++) {
    // when sees i on board
    State pi = decode(i);
    int t = 1-(pi.bitn&1);
    s[i][0] = t; // inspect bag A/B
    for (int j = 1; j <= N; j++) {
      // j in bag A/B
      bool b = j & (1 << pi.bitn);
      if (b && !pi.isset) {
        s[i][j] = t ? -1 : -2; // other has less
      } else if (!b && pi.isset) {
        s[i][j] = t ? -2 : -1; // this has less
      } else if (pi.bitn == 0) {
        s[i][j] = -1; // shouldn't happen
      } else {
        State p;
        p.bitn = pi.bitn - 1;
        p.isset = (j & (1 << p.bitn)) ? 1 : 0;
        s[i][j] = encode(p);
      }
    }
  }

  return s;
}

컴파일 시 표준 에러 (stderr) 메시지

prison.cpp: In function 'std::vector<std::vector<int> > devise_strategy(int)':
prison.cpp:40:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |   for (int i = 1; i < s.size(); i++) {
      |                   ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...