Submission #1088500

#TimeUsernameProblemLanguageResultExecution timeMemory
1088500MateiKing80Lockpicking (IOI23_lockpicking)C++17
100 / 100
20 ms4352 KiB
#include "lockpicking.h"
#include <bits/stdc++.h>

using namespace std;

int M;
vector<int> a, b;
vector<vector<int>> s, t;

void construct_card(int N, std::vector<int> A, std::vector<std::vector<int>> S)
{
    a = A, s = S;
    M = N * N;
    b.resize(M);
    t.assign(M, vector<int>(2));
    for(int c = 0; c < N; c ++)
    {
        for (int j = c * N; j < (c + 1) * N; j ++)
        {
            b[j] = a[j % N];
            t[j][b[j]] = c * N + s[j % N][b[j]];
            t[j][1 - b[j]] = -1;
        }
    }
    for(int i0 = 1; i0 < N; i0 ++)
    {
        int i = i0, j = 0;
        for (int cnt = 0; cnt < M; cnt ++)
        {
            if(b[j] == a[i])
            {
                j = t[j][b[j]];
                i = s[i][a[i]];
            }
            else
            {
                if (t[j][a[i]] == -1)
                {
                    int nxti = s[i][b[j]];
                    t[j][a[i]] = i0 * N + nxti;
                    break;
                }
                else
                {
                    j = t[j][a[i]];
                    i = s[i][1 - a[i]];
                }
            }
        }
    }
    for(int j = 0; j < M; j ++)
    {
        t[j][0] = max(0, t[j][0]);
        t[j][1] = max(0, t[j][1]);
    }

    define_states(M, b, t, 0);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...