Submission #714862

#TimeUsernameProblemLanguageResultExecution timeMemory
714862dxz05Painting Walls (APIO20_paint)C++17
100 / 100
1306 ms262244 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { vector<vector<int>> painters(K); for (int i = 0; i < M; i++){ for (int x : B[i]){ painters[x].push_back(i); } } vector<vector<int>> from(M); for (int i = 0; i < N; i++){ if (painters[C[i]].empty()) return -1; for (int j : painters[C[i]]){ int x = ((j - i) % M + M) % M; from[x].push_back(i); } } vector<bool> can(N); for (int x = 0; x < M; x++){ int sz = (int)from[x].size(); for (int i = 0; i < sz; i++){ int p1 = from[x][i]; int p2 = p1 + M - 1; if (i + M - 1 < sz && from[x][i + M - 1] == p2){ can[p1] = true; } } } if (!can[0]) return -1; vector<int> go; for (int i = 0; i < N; i++){ if (can[i]) go.push_back(i); } int ans = 0; int i = 0; while (i < N){ ans++; int p = upper_bound(go.begin(), go.end(), i) - go.begin() - 1; if (p < 0) return -1; int to = go[p] + M; if (to <= i) return -1; i = to; } 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...