#include<bits/stdc++.h>
#include "paint.h"
using namespace std;
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pb push_back
#define sz(x) (int)(x.size())
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define vi vector<int>
#define vp vector<pii>
#define vvi vector<vi>
#define ykh mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define __lg(x) 63-__builtin_clzll(x)
int n, m, k;
int minimumInstructions(int N, int M, int K, std::vector<int> C, std::vector<int> A, std::vector<std::vector<int>> B) {
n = N, m = M, k = K;
vector<int>col[k + 1];
for(int i = 0; i < m; i++){
for(int j = 0; j < A[i]; j++){
col[B[i][j]].pb(i);
}
}
vector<vector<int>>dp(2, vector<int>(n));
vector<int>ok(n);
for(int i = n - 1; i >= 0; i--){
for(auto j : col[C[i]]){
dp[i & 1][j] = dp[1 - (i & 1)][(j + 1) % m] + 1;
ok[i] |= (dp[i & 1][j] >= m);
}
if(i < n - 1) for(auto j : col[C[i + 1]]) dp[1 - i & 1][j] = 0;
}
vector<int>dp2(n, 2e9);
multiset<int>st;
for(int i = 0; i < n; i++){
if(i - m - 1 >= 0) st.erase(st.find(dp2[i - m - 1]));
if(ok[i]){
dp2[i] = (sz(st) ? *st.begin() : 0) + 1;
}
st.insert(dp2[i]);
}
return (dp2[n - m] < 2e9 ? dp2[n - m] : -1);
}
#ifdef local
int main() {
freopen("/Users/iantsai/cpp/input.txt","r",stdin);
freopen("/Users/iantsai/cpp/output.txt","w",stdout);
int N, M, K;
assert(3 == scanf("%d %d %d", &N, &M, &K));
//cout << N << ' ' << M << ' ' << K << '\n';
std::vector<int> C(N);
for (int i = 0; i < N; ++i) {
assert(1 == scanf("%d", &C[i]));
//cout << C[i] << ' ';
}
//cout << '\n';
//return 0;
std::vector<int> A(M);
std::vector<std::vector<int>> B(M);
for (int i = 0; i < M; ++i) {
assert(1 == scanf("%d", &A[i]));
B[i].resize(A[i]);
for (int j = 0; j < A[i]; ++j) {
assert(1 == scanf("%d", &B[i][j]));
}
}
int minimum_instructions = minimumInstructions(N, M, K, C, A, B);
printf("%d\n", minimum_instructions);
return 0;
}
#endif
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |