Submission #730657

#TimeUsernameProblemLanguageResultExecution timeMemory
730657t6twotwoPainting Walls (APIO20_paint)C++17
100 / 100
1135 ms17184 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; constexpr int inf = 1E6; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { auto F = [&](int x) { x %= M; if (x < 0) { x += M; } return x; }; vector<vector<int>> f(K); for (int i = 0; i < M; i++) { for (int x : B[i]) { f[x].push_back(i); } } multiset<int> st; int good = 0; vector<int> dp(N + 1, inf), cnt(M); dp[0] = 0; for (int i = 0; i < M; i++) { st.insert(dp[i]); for (int j : f[C[i]]) { if (++cnt[F(j - i)] == M) { good++; } } } for (int i = M; i <= N; i++) { if (good) { dp[i] = min(dp[i], (*st.begin()) + 1); } if (i == N) { break; } st.erase(st.find(dp[i - M])); st.insert(dp[i]); for (int j : f[C[i - M]]) { if (cnt[F(j - i)]-- == M) { good--; } } for (int j : f[C[i]]) { if (++cnt[F(j - i)] == M) { good++; } } } return dp[N] == inf ? -1 : dp[N]; }
#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...