Submission #712952

#TimeUsernameProblemLanguageResultExecution timeMemory
712952josanneo22Prisoner Challenge (IOI22_prison)C++17
60 / 100
14 ms1180 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;
}
State decode(int v) {
    State s;
    s.isset = (v >> 0) & 1;
    s.bitn = v >> 1;
    return s;
}

vector<vector<int>> devise_strategy(int N) {
    ::N = N;
    int Q = 25;
    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 = 12;
        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);
                if (s[i][j] == 0) {
                    s[i][j] = t ? -2 : -1; // this has less
                }
            }
        }
    }
    return s;
}

Compilation message (stderr)

prison.cpp: In function 'std::vector<std::vector<int> > devise_strategy(int)':
prison.cpp:39:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     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...