Submission #1234850

#TimeUsernameProblemLanguageResultExecution timeMemory
1234850marizaPrisoner Challenge (IOI22_prison)C++20
65 / 100
7 ms1256 KiB
#include "prison.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

vector<vector<int>> devise_strategy(int n) {
    vector<vector<int>> ans(25,vector<int>(n+1,0));

    for(ll w=0; w<=24; w++){
        ll c=((w+1)/2)%2, cbit=12-(w+1)/2, lbit=cbit+1;
        // cout<<w<<" "<<c<<" "<<cbit<<" "<<lbit<<" "<<(w%2)<<endl;
        ans[w][0]=c;

        if(w==0){
            for(ll a=1; a<=n; a++){
                ll ca=(a&(1ll<<cbit));
                if(ca>0) ans[w][a]=1;
                else ans[w][a]=2;
            }
        }
        else if(w==23 || w==24){
            for(ll a=1; a<=n; a++){
                ll lb=(w%2)*(1ll<<lbit), la=(a&(1ll<<lbit)), ca=(a&(1ll<<cbit));
                // cout<<w<<" "<<b<<": "<<lb<<" "<<la<<" "<<cb<<endl;
                if(lb>la) ans[w][a]=-1;
                else if(lb<la) ans[w][a]=-2;
                else if(a%2==0) ans[w][a]=-1;
                else ans[w][a]=-2;
            }
        }
        else if(c==0){
            for(ll a=1; a<=n; a++){
                ll lb=(w%2)*(1ll<<lbit), la=(a&(1ll<<lbit)), ca=(a&(1ll<<cbit));
                // cout<<w<<" "<<a<<": "<<lb<<" "<<la<<" "<<ca<<endl;
                if(lb>la) ans[w][a]=-1;
                else if(lb<la) ans[w][a]=-2;
                else if(ca>0) ans[w][a]=2*(13-cbit)-1;
                else ans[w][a]=2*(13-cbit);
            }
        }
        else{
            for(ll b=1; b<=n; b++){
                ll la=(w%2)*(1ll<<lbit), lb=(b&(1ll<<lbit)), cb=(b&(1ll<<cbit));
                // cout<<w<<" "<<b<<": "<<lb<<" "<<la<<" "<<cb<<endl;
                if(lb>la) ans[w][b]=-1;
                else if(lb<la) ans[w][b]=-2;
                else if(cb>0) ans[w][b]=2*(13-cbit)-1;
                else ans[w][b]=2*(13-cbit);
            }

        }
    }

    // for(ll w=0; w<=26; w++){
    //     for(ll x=0; x<=n; x++){
    //         cout<<w<<"-"<<x<<":"<<ans[w][x]<<" ";
    //     }
    //     cout<<endl;
    // }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...