Submission #1200764

#TimeUsernameProblemLanguageResultExecution timeMemory
1200764Braabebo10Painting Walls (APIO20_paint)C++20
28 / 100
1597 ms13388 KiB
#include "paint.h"
#include<bits/stdc++.h>
#define ll long long
#define nl "\n"
#define all(v) v.begin(),v.end()
#define baraa ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;

int minimumInstructions(
    int N, int M, int K, std::vector<int> C,
    std::vector<int> A, std::vector<std::vector<int> > B) {
    ll n = N, m = M, k = K;
    vector<ll> a, sz;
    vector<vector<ll> > col;
    set<ll> s;
    map<ll, bitset<4001> > mp;
    for (ll i = 0; i < n; i++)a.push_back(C[i]), s.insert(C[i]);
    for (ll i = 0; i < m; i++) {
        sz.push_back(A[i]);
        vector<ll> cur;
        for (ll j = 0; j < sz[i]; j++)
            cur.push_back(B[i][j]);
        col.push_back(cur);
    }
    for (ll c: s) {
        bitset<4001> cur = 0;
        for (ll i = 0; i < 2 * m; i++)
            cur[i] = (find(all(col[i % m]), c) != col[i % m].end());
        mp[c] = cur;
    }
    vector<ll> ok(n, 0), vis(n, 0);
    for (ll i = 0; i + m - 1 < n; i++) {
        bitset<4001> cur;
        cur.set();
        for (ll j = i, len = 0; j < n and len < m; len++, j++)
            cur &= (mp[a[j]] >> len);
        ok[i] = cur.count() > 0;
    }
    ll u = 0, steps = 0;
    while (u < n) {
        if (vis[u] >= 3)return -1;
        vis[u]++;
        steps++;
        if (ok[u])u += m;
        else {
            if (u)u--, steps--;
            else return -1;
        }
    }
    return steps;
}
#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...