Submission #1217657

#TimeUsernameProblemLanguageResultExecution timeMemory
1217657user736482죄수들의 도전 (IOI22_prison)C++20
100 / 100
8 ms2888 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 998244353
#define INF 1000000019
#define POT (1<<20)
#define INFL 1000000000000000099
vector<ll>v1={3,3,3,3,3,2,2,1,1},v2={0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,7,7,8};
vector<ll>roz[5001];
ll pm[10],pm2[10];
vector<vector<int>>ans;
vector<vector<int>>devise_strategy(int n){
    ios_base::sync_with_stdio(0);cin.tie(0);
    pm[v1.size()]=0;
    for(ll i=0;i<=20;i++){
        ans.pb({});
        for(ll i=0;i<=n;i++)ans.back().pb(0);
    }
    pm2[0]=1;
    for(ll i=1;i<=v1.size();i++)pm2[i]=pm2[i-1]+v1[i-1];
    for(ll i=v1.size()-1;i>=0;i--)pm[i]=pm[i+1]*v1[i]+2;
    for(ll i=1;i<=n;i++){
        ll ak=i;
        for(ll j=0;j<v1.size();j++){
            ak--;
            if(ak==-1){
                roz[i].pb(-1-pm2[roz[i].size()]);
                break;
            }
            if(ak==pm[j]-2){
                roz[i].pb(-2-pm2[roz[i].size()]);break;
            }
            roz[i].pb(ak/(pm[j+1]));
            ak%=pm[j+1];
        }
        for(ll j=0;j<21;j++)roz[i].pb(0);
    }
    for(ll i=0;i<=20;i++){
        ans[i][0]=(v2[i])%2;
        for(ll j=1;j<=n;j++){
            ll ph=v2[i];
            ans[i][j]=pm2[ph]+roz[j][ph];
            if(ph && roz[j][ph-1]!=i-pm2[ph-1]){
                if(roz[j][ph-1]<i-pm2[ph-1])ans[i][j]=-1;
                else ans[i][j]=-2;
            }
            if(ph && roz[j][ph-1]<0)ans[i][j]=roz[j][ph-1]+pm2[ph-1];
            ans[i][j]=min(ans[i][j],20);
        }
        if(ans[i][0]){
            for(ll j=1;j<=n;j++){
                if(ans[i][j]==-1)ans[i][j]=-2;
                else if(ans[i][j]==-2)ans[i][j]=-1;
            }
        }
        
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...