제출 #860743

#제출 시각아이디문제언어결과실행 시간메모리
860743alumno3435Prisoner Challenge (IOI22_prison)C++17
100 / 100
10 ms1116 KiB
#include<bits/stdc++.h>
#include "prison.h"
using namespace std;

vector<vector<int>> devise_strategy(int N) {

    vector<vector<int>> s;
    int w[9] = {5102, 1700, 566, 188, 62, 20, 6, 2, 1};
    for(int i=0; i<=0; i++){
        vector<int> v;
        v.push_back(0);
        for(int j=1; j<=N; j++){
            int I = 1+(j-2)/1700;
            if(j==1) I = -1;
            if(j==5102) I=-2;
            v.push_back(I);
        }
        s.push_back(v);
    }
    for(int i=1; i<=20; i++){
        vector<int> v;
        v.push_back((1+(i-1)/3)%2);
        int t=(i-1)%3;
        int L = (i-1)/3+1;
        for(int j=1; j<=N; j++){
            int J1=j;
            int J2=j;
            for(int k=1; k<L; k++){
                J1=1+(J1-2)%w[k];
            }
            J2=1+(J1-2)%w[L];
            int I;
            if(J1==1){
                I=0-(1+L%2);
            }else if(J1==w[L-1]){
                I=0-(1+(L+1)%2);
            }else{
                I=(J1-2)/w[L];
                if(I==t){
                    I = 3*L+1+(J2-2)/w[L+1];
                    if(J2==1){
                        I=0-(1+L%2);
                    }else if(J2==w[L]){
                        I=0-(1+(L+1)%2);
                    }
                }else if(I<t){
                    I=0-(1+L%2);
                }else if(I>t){
                    I=0-(1+(L+1)%2);
                }
            }
            if(I>20) I=-1;
            if(I<-2) I=-1;
            v.push_back(I);
        }
        s.push_back(v);
    }
    return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...