Submission #1226041

#TimeUsernameProblemLanguageResultExecution timeMemory
1226041SpyrosAliv벽 칠하기 (APIO20_paint)C++20
0 / 100
0 ms328 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);
  vector<int> after;
  vector<int> ord;
  for (int i = 0; i < m; i++) {
    ord.push_back(B[i][0]);
    likedBy[B[i][0]] = i;
  }
  after.assign(k+1, 0);
  for (int i = 0; i < m-1; i++) {
    after[ord[i]] = ord[i+1];
  }
  after[ord[m-1]] = ord[0];
  for (int i = 0; i < n; i++) {
    if (likedBy[c[i]] == -1) return -1;
  }
  vector<bool> good(n, true);
  int cnt = 1;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    if (after[c[i-1]] != c[i]) {
        good[i] = false;
        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...