제출 #409046

#제출 시각아이디문제언어결과실행 시간메모리
409046CheckMate벽 칠하기 (APIO20_paint)C++17
28 / 100
1594 ms91344 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e7; int minimumInstructions(int n, int m, int K, vector<int> c, vector<int> a, vector< vector<int> > b) { vector<bool> can(n); for (int i = 0; i < n; i++) { can[i] = false; } vector< vector<int> > S(K); map<int, bool> mp[m]; for (int i = 0; i < m; i++) { for (int j = 0; j < a[i]; j++) { mp[i][b[i][j]] = true; S[b[i][j]].push_back(i); } } for (int i = 0; i <= n - m; i++) { for (int j = 0; j < (int)S[c[i]].size(); j++) { int x = S[c[i]][j]; bool OK = true; for (int k = 0; k < m; k++) { if (!mp[(x + k) % m][c[i + k]]) { OK = false; } } if (OK) { can[i] = true; } } } int dp[n + 1]; for (int i = 0; i <= n; i++) dp[i] = inf; dp[0] = 0; for (int i = 0; i < n; i++) { if (can[i]) { for (int j = i + 1; j <= i + m; j++) { dp[j] = min(dp[j], dp[i] + 1); } } } int ans = dp[n]; if (dp[n] == inf) ans = -1; 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...