#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
int n, m, k;
vector<int> c;
vector<set<int>> cov;
const int INF = 1e9;
vector<int> likedBy;
bool check(int idx) {
int start = likedBy[c[idx]];
if (start == -1) return false;
bool flag = true;
for (int j = 0; j < m; j++) {
int i = idx + j;
int curr = (start + j) % m;
if (cov[curr].find(c[i]) != cov[curr].end()) continue;
else {
flag = false;
break;
}
}
if (flag) return true;
return false;
}
int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) {
n = N;
m = M;
k = K;
c = C;
cov.resize(m);
likedBy.assign(k, -1);
vector<int> after;
vector<int> ord;
for (int i = 0; i < m; i++) {
ord.push_back(B[i][0]);
likedBy[B[i][0]] = i;
}
after.assign(k+1, 0);
for (int i = 0; i < m-1; i++) {
after[ord[i]] = ord[i+1];
}
after[m-1] = ord[0];
for (int i = 0; i < n; i++) {
if (likedBy[c[i]] == -1) return -1;
}
vector<bool> good(n, true);
int cnt = 1;
int ans = 0;
for (int i = 1; i < n; i++) {
if (after[c[i-1]] != c[i]) {
good[i] = false;
if (cnt < m) return -1;
ans += cnt / m + ((cnt % m) > 0);
cnt = 1;
}
else cnt++;
}
if (cnt < m) return -1;
ans += cnt / m + ((cnt % m) > 0);
return ans;
}
# | 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... |