Submission #429921

#TimeUsernameProblemLanguageResultExecution timeMemory
429921SundavarPainting Walls (APIO20_paint)C++14
100 / 100
877 ms13228 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { vector<vector<int> > colors(K); for(int i = 0; i < M; i++) for(int& a : B[i]) colors[a].push_back(i); vector<pii> last(M, {0, -3}); vector<bool> start(N, false); for(int i = 0; i < N; i++){ vector<pii> uj; uj.reserve(colors[C[i]].size()); for(int& a : colors[C[i]]){ pii here = {a, 1}; if(last[(a+M-1)%M].second == i-1) here.second += last[(a+M-1)%M].first; uj.push_back(here); } for(pii& a : uj){ if(a.second >= M) start[i-M+1] = true; last[a.first] = {a.second, i}; } } vector<int> best(N, -1e9); for(int i = 0; i < N; i++) best[i] = max((i > 0 ? best[i-1] : -1e9), (start[i] ? i : -1e9)); int poz = 0, ans = 0; while(poz < N){ if(poz >= M + best[poz] ) return -1; poz = best[poz]+M, 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...