Submission #1161779

#TimeUsernameProblemLanguageResultExecution timeMemory
1161779The_SamuraiPainting Walls (APIO20_paint)C++20
51 / 100
574 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); 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; } } } // for (int j = 0; j < m; j++) { // vector<int> pref(n); // for (int i = 0; i < n; i++) { // if (!likes[j][c[i]]) continue; // int l = max(0, i - m + 1); // int r = min(i, n - m); // // cout << i << ' ' << j << ' ' << l << ' ' << r << endl; // pref[l]++; // if (r + 1 < n) pref[r + 1]--; // } // for (int i = 1; i < n; i++) pref[i] += pref[i - 1]; // for (int i = 0; i < n; i++) { // if (pref[i]) cnt[i]++; // } // } 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...