이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef long long ll;
#define FOR(i, a, b) for(int i = a; i < b; i++)
#define ROF(i, a, b) for(int i = a; i >= b; i--)
int minimumInstructions(int n, int m, int k, vi c, vi a, vector<vi> b) {
int ans = 0;
int num[m]; memset(num, 0, sizeof(num));
int check[n]; memset(check, 0, sizeof(check));
vi con[k];
FOR(i, 0, m){
FOR(j, 0, a[i]){
con[b[i][j]].push_back(i);
}
}
FOR(i, 0, m){
for (int j : con[c[i]]){
int l = (j-i+m) % m;
num[l]++;
}
}
int cnt = 0;
FOR(i, 0, m){
if (num[i] == m) cnt++;
}
if (cnt > 0) check[0] = 1;
FOR(i, 0, n-m){
for (int j : con[c[i]]){
int l = (j-i+m) % m;
num[l]--;
if (num[l] == m-1) cnt--;
}
for (int j : con[c[i+m]]){
int l = (j-i+m) % m;
num[l]++;
if (num[l] == m) cnt++;
}
if (cnt > 0) check[i+1] = 1;
}
int r = 0;
FOR(i, 0, n-m+1){
if (i < r) continue;
if (i > r){
ans = -1;
break;
}
ans++;
FOR(j, i+1, i+m+1){
if (check[j] == 1) r = j;
}
}
if (check[0] == 0) return -1;
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |