제출 #1212456

#제출 시각아이디문제언어결과실행 시간메모리
1212456NValchanovPrisoner Challenge (IOI22_prison)C++20
56 / 100
8 ms1096 KiB
//#include "prison.h"

#include <vector>

using namespace std;

vector < vector < int > > devise_strategy(int n)
{
    int lg = 1;
    int cur = 2;

    while(cur <= n)
    {
        lg++;
        cur *= 2;
    }

    vector < vector < int > > ans;

    ans.resize(2 * lg + 1);

    for(int i = 0; i <= 2 * lg; i++)
    {
        ans[i].resize(n + 1, 0);
    }

    for(int sees = 1; sees <= n; sees++)
    {
        int which = lg - 1;
        bool bit = (bool)(sees & (1 << which));

        ans[0][sees] = bit + 1;  
    }

    for(int reads = 1; reads <= 2 * lg; reads++)
    {
        int whole = reads / 2 + reads % 2;

        if(whole % 2 == 0)
            ans[reads][0] = 0;
        else
            ans[reads][0] = 1;

        for(int sees = 1; sees <= n; sees++)
        {
            bool bita = !(reads % 2);
            int which = lg - whole;
            bool bitb = (bool)(sees & (1 << which));

            if(bita < bitb)
            {
                if(whole % 2 == 0)
                    ans[reads][sees] = -2;
                else
                    ans[reads][sees] = -1;
            }
            else if(bita > bitb)
            {
                if(whole % 2 == 0)
                    ans[reads][sees] = -1;
                else
                    ans[reads][sees] = -2;
            }
            else
            {
                if(whole == lg)
                {
                    ans[reads][sees] = 0;
                }
                else
                {
                    bool nxtbit = (bool)(sees & (1 << (which - 1)));

                    int writes = 2 * whole + nxtbit + 1;

                    ans[reads][sees] = writes;
                }
            }
        }
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...