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