제출 #717165

#제출 시각아이디문제언어결과실행 시간메모리
717165LittleCube벽 칠하기 (APIO20_paint)C++14
28 / 100
1569 ms2496 KiB
#include "paint.h" #ifndef EVAL #include "grader.cpp" #endif #include <bits/stdc++.h> #define pii pair<int, int> #define F first #define S second using namespace std; int minimumInstructions( int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { auto match = [&](int i, int j) { auto iter = lower_bound(B[j].begin(), B[j].end(), C[i]); if (iter != B[j].end() && *iter == C[i]) return 1; return 0; }; vector<int> cover(N, 0), dp(N, 0); for (int x = 0; x < M; x++) { int cnt = 0; for (int y = 0; y < M; y++) cnt += match(y, (x + y) % M); for (int y = 0; y < N - M; y++) { if (cnt == M) cover[y] = 1; cnt -= match(y, (x + y) % M); cnt += match(y + M, (x + y + M) % M); } if (cnt == M) cover[N - M] = 1; } for (int i = 0; i < N; i++) { dp[i] = (cover[i] ? i : (i ? dp[i - 1] : -1e9)); } int cur = 0, ans = 0; while (cur < N) { if (dp[cur] + M <= cur) break; cur = max(cur, dp[cur] + M), ans++; } return (cur < N ? -1 : 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...