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...