제출 #1201761

#제출 시각아이디문제언어결과실행 시간메모리
1201761aykhn벽 칠하기 (APIO20_paint)C++20
0 / 100
0 ms328 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<int> idx[K];
  for (int i = 0; i < M; i++)
  {
    for (int &j : B[i]) idx[j].push_back(i);
  }
  vector<int> cnt(M, 0);
  int cM = 0;
  vector<int> ok(N, 0);
  for (int i = N - 1; i >= 0; i--)
  {
    for (int &j : idx[C[i]]) 
    {
      cM -= (cnt[(i - j + M) % M]++ == M);
      cM += (cnt[(i - j + M) % M] == M);
    }
    if (i + M < N) for (int &j : idx[C[i + M]]) 
    {
      cM -= (cnt[(i - j + M) % M]-- == M);
      cM += (cnt[(i - j + M) % M] == M);
    }
    if (cM) ok[i] = 1;
  }
  int res = 0;
  for (int l = 0, last = -1, mx = -M; l < N; l++)
  {
    while (last < l)
    {
      last++;
      if (ok[last]) mx = max(mx, last);
    }
    if (mx + M <= l) return -1;
    l = mx + M;
    res++;
  }
  return res;
}
#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...