Submission #1161848

#TimeUsernameProblemLanguageResultExecution timeMemory
1161848The_SamuraiPainting Walls (APIO20_paint)C++20
51 / 100
532 ms589824 KiB
#include "paint.h"
#include "bits/stdc++.h"
using namespace std;

int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> ln, vector<vector<int>> g) {
    vector likes(m, vector(k, false));
    for (int i = 0; i < m; i++) {
        for (int x: g[i]) likes[i][x] = true;
    }
    vector<int> cnt(n);
    int y = 0, old = -m, ans = 0;
    while (true) {
        for (int x = 0; x < m; x++) {
            bool ok = true;
            for (int i = 0; i < m and ok; i++) {
                ok &= likes[(x + i) % m][c[y + i]];
            }
            if (ok) {
                cnt[y] = m;
                break;
            }
        }
        if (cnt[y]) ans++;
        if (y == n - m and cnt[y]) break;
        if (y == n - m) return -1;
        if (cnt[y]) {
            
            old = y;
            y = min(n - m, y + m);
            continue;
        }
        y--;
        if (y == old or y < 0) return -1;
    }
    // for (int y = 0; y <= n - m; y++) {
        
    //     for (int x = 0; x < m; x++) {
    //         bool ok = true;
    //         for (int i = 0; i < m and ok; i++) {
    //             ok &= likes[(x + i) % m][c[y + i]];
    //         }
    //         if (ok) {
    //             cnt[y] = m;
    //             break;
    //         }
    //     }
    // }
    // set<int, greater<>> st; st.insert(-m);
    // for (int i = 0; i <= n - m; i++) {
    //     if (cnt[i] == m) st.insert(i);
    // }
    // int now = -m, ans = 0;
    // while (now < n - m) {
    //     auto it = st.lower_bound(now + m);
    //     if (*it == now) return -1;
    //     now = *it;
    //     ans++;
    // }

    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...