제출 #1369265

#제출 시각아이디문제언어결과실행 시간메모리
1369265leolin0214Prisoner Challenge (IOI22_prison)C++20
72 / 100
5 ms1228 KiB
#include "prison.h"

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

std::vector<std::vector<int>> devise_strategy(int N) {
    int n = N;
    int b = 3;
    int c = 7;           // b ^ (c+1) must be greater than n
    
    // vector<int> base = {2, 2, 2, 2, 2, 2, 2, 2, 2, 5};

    int x = b * (c + 1) - 1;

    vector<vector<int>> s(x+1, vector<int>(n+1));

    for (int i=0; i<=x; i++) {
        
        int read = i > 0 ? i : b * (c + 1);
        int bit = read / b;
        int O = read % b;

        if (bit & 1) {
            int A = O;
            s[i][0] = 1;   // check B
            for (int j=1; j<=n; j++) {
                int B = j; for (int k=0; k<bit; k++) B /= b; B %= b;
                int P = j; for (int k=1; k<bit; k++) P /= b; P %= b;
                if (A == B) {
                    int write = (bit - 1) * b + P;
                    if (write == 0) write = -2;
                    s[i][j] = write;
                }else{
                    s[i][j] = A < B ? -1 : -2;
                }
            }
        }else{
            int B = O;
            s[i][0] = 0;   // check A
            for (int j=1; j<=n; j++) {
                int A = j; for (int k=0; k<bit; k++) A /= b; A %= b;
                int P = j; for (int k=1; k<bit; k++) P /= b; P %= b;
                if (A == B) {
                    int write = (bit - 1) * b + P;
                    if (write == 0) write = -1;
                    s[i][j] = write;
                }else{
                    s[i][j] = A < B ? -1 : -2;
                }
            }
        }
    }

    return s;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…