제출 #1221386

#제출 시각아이디문제언어결과실행 시간메모리
1221386totoro죄수들의 도전 (IOI22_prison)C++20
48.50 / 100
43 ms1348 KiB
#include "prison.h"

#include <vector>

std::vector<int> ternary(int x) {
    std::vector<int> ans;
    for (int trit = 0; trit < 8; ++trit) {
        ans.push_back(x % 3);
        x /= 3;
    }
    return ans;
}

std::vector<std::vector<int>> devise_strategy(int N) {
    std::vector<std::vector<int>> strategy(32, std::vector<int>(N + 1));
    for (int val = 0; val < 32; ++val) {
        int tritnum = 7 - val / 4;
        int state = val % 4;
        if (state == 0) {
            strategy[val][0] = 0;
            for (int inbaga = 1; inbaga <= N; ++inbaga) {
                strategy[val][inbaga] = 4 * (val / 4) + 1 + ternary(inbaga)[tritnum];
            }
        } else {
            strategy[val][0] = 1;
            for (int inbagb = 1; inbagb <= N; ++inbagb) {
                int tritval = ternary(inbagb)[tritnum];
                if (tritval > state - 1) {
                    // B is bigger
                    strategy[val][inbagb] = -1;
                } else if (tritval < state - 1) {
                    // A is bigger
                    strategy[val][inbagb] = -2;
                } else {
                    // recurse
                    strategy[val][inbagb] = ((val / 4 + 1) * 4) % 32;
                }
            }
        }
    }
    return strategy;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...