제출 #380903

#제출 시각아이디문제언어결과실행 시간메모리
380903SolarSystem벽 칠하기 (APIO20_paint)C++17
0 / 100
1 ms364 KiB
#include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <string> #include <math.h> #include <set> #include <map> #include <queue> #include <stack> #include <stdio.h> #include <numeric> #include <iomanip> #include <unordered_set> using namespace std; vector<unordered_set<int>> t; bool check(vector<int> &s) { s.push_back(-1); vector<int> pi(s.size() + t.size()); pi[0] = 0; for (int i = 1; i < (int) pi.size(); i++) { int j = pi[i - 1]; while (j > 0) { if (i < (int) s.size() && s[j] != s[i]) { j = pi[j - 1]; } else if (i >= (int) s.size() && t[i - (int) s.size()].find(s[j]) != t[i - (int) s.size()].end()) { j = pi[j - 1]; } else { break; } } if (i < (int) s.size() && s[j] == s[i]) { j++; } else if (i >= (int) s.size() && t[i - (int) s.size()].find(s[j]) == t[i - (int) s.size()].end()) { j++; } pi[i] = j; } for (int u: pi) { if (u == (int) s.size() - 1) { return true; } } return false; } int minimumInstructions(int n, int m, int k1, vector<int> c, vector<int> a, vector<vector<int>> b) { t.resize(m); for (int i = 0; i < m; i++) { for (int j = 0; j < a[i]; j++) { t[i].insert(b[i][j]); } } for (int i = 0; i < m; i++) { t.push_back(t[i]); } int ans = 0; int j = -1, k = -1; for (int i = 0; ; i++) { vector<int> e; if (i + m - 1 < n) { for (int j = i; j <= i + m - 1; j++) { e.push_back(c[j]); } } if (check(e)) { j = i; } if (i > k) { if (j + m - 1 <= k) { return -1; } else { ans++; k = j + m - 1; } } if (k > n) { return -1; } else if (k == n) { 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...