제출 #399418

#제출 시각아이디문제언어결과실행 시간메모리
399418proma벽 칠하기 (APIO20_paint)C++17
12 / 100
42 ms9932 KiB
#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) { int P[N], L[N], G[N+M], pos[K]; memset(pos, -1, sizeof(pos)); for (int i = 0; i < M; i ++) { for (int j = 0; j < A[i]; j ++) { pos[B[i][j]] = i; } } memset(P, 0, sizeof(P)); int lft = 0; if (pos[C[0]] == -1) return -1; for (int y = 1; y < N; y ++) { if (pos[C[y]] == -1) return -1; if (pos[C[y]] != (pos[C[y-1]] + 1) % M) { for (int i = lft; i <= y - M; i ++) { P[i] = 1; } lft = y; } } for (; lft <= N - M; lft ++) P[lft] = 1; if (P[0]) L[0] = 0; else return -1; for (int i = 1; i < N; i ++) { if (P[i]) L[i] = i; else L[i] = L[i-1]; } memset(G, 0, sizeof(G)); for (int i = N - 1; i >= 0; i --) { if (i - L[i] >= M) { return -1; } G[i] = 1 + G[L[i] + M]; } return G[0]; } /* void solve () { int N, M, K; vector <int> C, A; vector <vector<int>> B; cin >> N >> M >> K; C.resize(N); A.resize(M); B.resize(M); for (int i = 0; i < N; i ++) { cin >> C[i]; } for (int i = 0; i < M; i ++) { cin >> A[i]; B[i].resize(A[i]); for (int j = 0; j < A[i]; j ++) { cin >> B[i][j]; } } cout << minimumInstructions(N, M, K, C, A, B) << endl; } int main () { solve(); return 0; } */
#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...