Submission #409046

#TimeUsernameProblemLanguageResultExecution timeMemory
409046CheckMatePainting Walls (APIO20_paint)C++17
28 / 100
1594 ms91344 KiB
#include <bits/stdc++.h>
using namespace std;

const int inf = 1e7;

int minimumInstructions(int n, int m, int K, vector<int> c, vector<int> a, vector< vector<int> > b) {
    vector<bool> can(n);
    for (int i = 0; i < n; i++) {
        can[i] = false;
    }

    vector< vector<int> > S(K);
    map<int, bool> mp[m];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < a[i]; j++) {
            mp[i][b[i][j]] = true;
            S[b[i][j]].push_back(i);
        }
    }

    for (int i = 0; i <= n - m; i++) {
        for (int j = 0; j < (int)S[c[i]].size(); j++) {
            int x = S[c[i]][j];
            bool OK = true;
            for (int k = 0; k < m; k++) {
                if (!mp[(x + k) % m][c[i + k]]) {
                    OK = false;
                }
            }

            if (OK) {
                can[i] = true;
            }
        }
    }

    int dp[n + 1];
    for (int i = 0; i <= n; i++) dp[i] = inf;
    dp[0] = 0;

    for (int i = 0; i < n; i++) {
        if (can[i]) {
            for (int j = i + 1; j <= i + m; j++) {
                dp[j] = min(dp[j], dp[i] + 1);
            }
        }
    }

    int ans = dp[n];
    if (dp[n] == inf) ans = -1;
    return ans;
}
#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...