제출 #1226052

#제출 시각아이디문제언어결과실행 시간메모리
1226052SpyrosAliv벽 칠하기 (APIO20_paint)C++20
12 / 100
21 ms10136 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;

int n, m, k;
vector<int> c;
vector<set<int>> cov;
const int INF = 1e9;
vector<int> likedBy;

bool check(int idx) {
    int start = likedBy[c[idx]];
    if (start == -1) return false;
    bool flag = true;
    for (int j = 0; j < m; j++) {
      int i = idx + j;
      int curr = (start + j) % m;
      if (cov[curr].find(c[i]) != cov[curr].end()) continue;
      else {
        flag = false;
        break;
      }
    }
    if (flag) return true;
  return false;
}

int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) {
  n = N;
  m = M;
  k = K;
  c = C;
  cov.resize(m);
  likedBy.assign(k, -1);
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < A[i]; j++) {
        likedBy[B[i][j]] = i;
    }
  }
  for (int i = 0; i < n; i++) {
    if (likedBy[c[i]] == -1) return -1;
    c[i] = likedBy[c[i]];
  }
  int cnt = 1;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    if ((c[i-1] + 1) % m != c[i]) {
        if (cnt < m) return -1;
        ans += cnt / m + ((cnt % m) > 0);
        cnt = 1;
    }
    else cnt++;
  }
  if (cnt < m) return -1;
  ans += cnt / m + ((cnt % m) > 0);
  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...