Submission #850135

#TimeUsernameProblemLanguageResultExecution timeMemory
850135tvladm2009Painting Walls (APIO20_paint)C++17
100 / 100
646 ms18264 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; int n, m, k; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { vector<int> a, c; vector<vector<int>> b; n = N; m = M; k = K; c = C; a = A; b = B; assert((int)c.size() == n); assert((int)a.size() == m); assert((int)b.size() == m); vector<vector<int>> who(k); vector<int> cnt(m, 0); for (int i = 0; i < m; i++) { assert((int)b[i].size() == a[i]); for (auto& it : b[i]) { who[it].push_back(i); } } int cm = 0; for (int i = 0; i < m; i++) { for (auto &it : who[c[i]]) { int z = (i + m - it) % m; cm -= (cnt[z] == m); cnt[z]++; cm += (cnt[z] == m); } } vector<bool> ok(n, 0); ok[0] = (cm >= 1); for (int i = 1; i <= n - m; i++) { int j = i + m - 1; assert(j < n); { for (auto &it : who[c[j]]) { int z = (j + m - it) % m; cm -= (cnt[z] == m); cnt[z]++; cm += (cnt[z] == m); } } { for (auto &it : who[c[i - 1]]) { int z = (i - 1 + m - it) % m; cm -= (cnt[z] == m); cnt[z]--; cm += (cnt[z] == m); } } ok[i] = (cm >= 1); } vector<int> inds; for (int i = 0; i < n; i++) { if (ok[i]) { inds.push_back(i); } } if (inds.empty()) { return -1; } assert((int) inds.size() >= 1); if (inds[0] != 0 || inds.back() != n - m) { return -1; } int l = 0, cost = 0; while (1) { int r = l; cost++; while (r + 1 < (int) inds.size() && inds[r + 1] <= inds[l] + m) { r++; } if (r == (int) inds.size() - 1) { if (l < r) { cost++; } break; } if (l == r) { return -1; } l = r; } return cost; }
#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...