Submission #1226040

#TimeUsernameProblemLanguageResultExecution timeMemory
1226040SpyrosAliv벽 칠하기 (APIO20_paint)C++20
0 / 100
0 ms328 KiB
#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 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...