제출 #685392

#제출 시각아이디문제언어결과실행 시간메모리
68539279brue죄수들의 도전 (IOI22_prison)C++17
0 / 100
5 ms560 KiB
#include "prison.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n;

int grp[] = {0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7};
int off[] = {0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2};
int seq[] = {3, 3, 3, 3, 3, 3, 2};
int lim[] = {5102, 1700, 566, 188, 62, 20, 6, 2};
int stt[] = {0, 1, 4, 7, 10, 13, 16, 18};

vector<vector<int> > devise_strategy(int N){
    n = N;
    vector<vector<int> > ret (21);
    for(int c=0; c<=20; c++){
        ret[c].resize(N+1);
        int g = grp[c];
        ret[c][0] = g%2;
        for(int i=1; i<=N; i++){
            int v = i;
            bool bad = 0;
            for(int j=0; j<g; j++){
                if(v == 1 || v == lim[j]){
                    if(v == 1) ret[c][i] = (g%2) ? -2 : -1;
                    else       ret[c][i] = (g%2) ? -1 : -2;
                    break;
                }
                v = (v - 2) % lim[j+1] + 1;
            }
            if(bad) continue;
            /// 가능한 답안인 경우
            if(v == 1) ret[c][i] = (g%2) ? -2 : -1;
            else if(v == lim[g]) ret[c][i] = (g%2) ? -1 : -2;
            else if(g==7) ret[c][i] = 0; /// 있을 수 없는 경우
            else{ /// 끝점 아님
                int tv = (v-2)/lim[g+1]+1;
                if(!g) ret[c][i] = tv;
                else if(g && tv != off[c]){
                    if(tv < off[c]) ret[c][i] = (g%2) ? -2 : -1;
                    else            ret[c][i] = (g%2) ? -1 : -2;
                }
                else if(g==6){ /// 마지막 비교
                    if((v-2)%lim[g+1] == 1) ret[c][i] = -2;
                    else ret[c][i] = -1;
                }
                else ret[c][i] = stt[g+1] + (v-2)%lim[g+1]/lim[g+2];
            }
        }
    }
    return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...