제출 #1267298

#제출 시각아이디문제언어결과실행 시간메모리
1267298silentloop죄수들의 도전 (IOI22_prison)C++20
10 / 100
7 ms1096 KiB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define all(x) x.begin(),x.end()
#define fr first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;

int con(ll x)
{
    if(x==1)
        return 2;
    return 1;
}

std::vector<std::vector<int>> devise_strategy(int N)
{
    ll i, j, ab=1, bit=7, sig=1, val, tam=23, aBit, aVal, sigab;

    vector<int>pot(9,1);
    for(i=1; i<=bit; i++)
        pot[i]=pot[i-1]*3;

    vector<vector<int>>ans(tam,vector<int>(N+1,0));
    for(i=1; i<tam; i+=3)
    {
        sigab=con(ab+1)-1;
        for(j=0; j<3; j++)
            if(i+j<tam)
            {
              ans[i+j][0]=ab;
              ans[i+j][N]=-(sigab+1);
            }
        
        ab=con(ab+1)-1;
    }

    for(i=1; i<=N; i++)
    {
        val=(i/pot[bit])%3;
        ans[0][i]=sig+val;
    }
    aBit=bit;
    bit--;
    sig+=3;
    for(j=1; j<tam-1; j++)
    {
        for(i=1; i<=N; i++)
        {
            val=(i/pot[aBit])%3;
            aVal=(j-1)%3;
            if(val<aVal)
                ans[j][i]=-(ans[j][0]+1);
            else if(val>aVal)
                ans[j][i]=-con(ans[j][0]+1);
            else
            {
                val=(i/pot[bit])%3;
                ans[j][i]=sig+val;
                if(ans[j][i]==24)
                    ans[j][i]=-1;
                if(ans[j][i]==22)
                    ans[j][i]=-2;
                if(ans[j][i]==23)
                    ans[j][i]=22;
            }
        }
        if(j%3==0)
        {
            aBit=bit;
            bit--;
            sig+=3;
        }
    }
    ans[21][N]=0;
    for(i=1; i<=N; i++)
    {
        val=i%3;
        aVal=1;
        if(val<=aVal)
            ans[22][i]=-(ans[22][0]+1);
        else
            ans[22][i]=-con(ans[22][0]+1);
    }
    /*for(i=0; i<sz(ans); i++)
    {
        for(j=0; j<sz(ans[i]); j++)
            cout << ans[i][j] << ' ';
        cout << '\n';
    }*/
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...