Submission #765963

#TimeUsernameProblemLanguageResultExecution timeMemory
765963KhizriPrisoner Challenge (IOI22_prison)C++17
65 / 100
36 ms1128 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define INF 1e18
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define OK cout<<"Ok"<<endl;
#define MOD (ll)(1e9+7)
const int mxn=5e3+5;
int color[mxn];
int digit(int k,int idx){
    if(idx>7){
        return  0;
    }
    if(idx<0) idx=0;
    vector<int>vt;
    while(k>0){
        vt.pb(k%3);
        k/=3;
    }
    while(vt.size()<8){
        vt.pb(0);
    }
    return vt[7-idx];
}
int lst(int idx){
    if(idx==0) return 0;
    if(idx<=6) return 6;
    if(idx<=12) return 12;
    if(idx<=18) return 18;
    return 0;
}
int lst2(int idx){
    if(idx<=3) return 3;
    if(idx<=9) return 9;
    if(idx<=15) return 15;
    if(idx<=21) return 21;
    return 0;
}
vector<vector<int>> devise_strategy(int n) {
    color[0]=1;
    int k=0,qq=-1;
    for(int i=1;i<=24;i++){
        k++;
        if(k>3){
            k=1;
            qq=qq*-1;
        }
        color[i]=k*qq;
    }
    vector<vector<int>>ans;
    for(int id=0;id<25;id++){
        if(color[id]>0){
            vector<int>vt;
            vt.pb(0);
            for(int i=1;i<=n;i++){
                int idx=(id+2)/3-1;
                int q=digit(i,idx);
                if(id==0){
                    vt.pb(id+q+1);
                }
                else{
                    if(color[id]-1<q){
                        vt.pb(-2);
                    }
                    else if(color[id]-1>q){
                        vt.pb(-1);
                    }
                    else{
                        int q=digit(i,idx+1);
                        vt.pb(lst(id)+q+1);
                    }
                }
            }
            ans.pb(vt);
        }
        else{
            vector<int>vt;
            vt.pb(1);
            for(int i=1;i<=n;i++){
                int idx=(id+2)/3-1;
                int q=digit(i,idx);
                if(-color[id]-1<q){
                    vt.pb(-1);
                }
                else if(-color[id]-1>q){
                    vt.pb(-2);
                }
                else{
                    int q=digit(i,idx+1);
                    vt.pb(lst2(id)+q+1);
                }
            }
            ans.pb(vt);
        }
    }
    /*
    for(int i=0;i<ans.size();i++){
        for(int v:ans[i]){
            cout<<v<<' ';
        }
        cout<<endl;
    }
    */
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...