Submission #724044

#TimeUsernameProblemLanguageResultExecution timeMemory
724044danikoynovPainting Walls (APIO20_paint)C++14
28 / 100
26 ms9472 KiB
#include "paint.h"

#include <bits/stdc++.h>
using namespace std;

const int maxn = 510, maxk = 1e5 + 10;

int dp[maxn], c[maxn], a[maxn], n, m;
vector < int > b[maxn];
bitset < maxn > col[maxk];

int minimumInstructions(
    int N, int M, int K, vector<int> C,
    vector<int> A, vector<vector<int>> B)
{

    n = N;
    m = M;
    for (int i = 0; i < n; i ++)
    {
        c[i] = C[i];
    }

    for (int i = 0; i < m; i ++)
    {
                a[i] = A[i];
        for (int j = 0; j < a[i]; j ++)
            b[i].push_back(B[i][j]), col[b[i][j]][i] = 1;
    }

    for (int i = 0; i < N; i ++)
        dp[i] = 1e9;

    for (int i = N - M; i >= 0; i --)
    {
        bool tf = false;
        for (int st = 0; st < M; st ++)
        {
            bool is_pos = true;
            for (int pos = 0; pos < M; pos ++)
            {
                if (col[c[i + pos]][(st + pos) % M] == 0)
                {
                    ///cout << "break " << pos << endl;
                    is_pos = false;
                    break;
                }
            }
            if (is_pos)
            {
                ///cout << i << " " << st << endl;
                tf = true;
                break;
            }
        }



        if (tf)
        {
            for (int j = i + 1; j <= i + M; j ++)
                dp[i] = min(dp[i], dp[j] + 1);

        }
    }

    if (dp[0] > N)
    return -1;
    return dp[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...
#Verdict Execution timeMemoryGrader output
Fetching results...