제출 #1312097

#제출 시각아이디문제언어결과실행 시간메모리
1312097LucaLucaM수열 (BOI14_sequence)C++20
25 / 100
1095 ms2180 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cassert> #include <bitset> #define debug(x) #x << " = " << x << '\n' using ll = long long; const ll INF = 1e17; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); int n; std::cin >> n; auto check = [&](ll n, std::vector<std::bitset<10>> restr) { for (int i = 0; i < (int) restr.size(); i++) { std::bitset<10> dig = 0; ll x = n + i; while (x) { dig[x % 10] = true; x /= 10; } for (int d = 0; d < 10; d++) { if (restr[i][d] && !dig[d]) { return false; } } } return true; }; auto solve = [&](auto &&self, std::vector<std::bitset<10>> restr) -> ll { if ((int) restr.size() <= 2) { ll n = 0; while (n < 1000 && !check(n, restr)) { n++; } if (n == 1000) { return +INF; } return n; } ll ret = +INF; for (int y = 0; y < 10; y++) { std::vector<std::bitset<10>> newrestr(((int) restr.size() + y - 1) / 10 + 1); // (X)y, (X)y+1, (X)y+2, ..., (X)9 for (int i = 0; i < (int) restr.size(); i++) { int X = (i + y) / 10; int marked = (i + y) % 10; std::bitset<10> me = restr[i]; me[marked] = 0; newrestr[X] |= me; } ret = std::min(ret, self(self, newrestr) * 10 + y); } return ret; }; std::vector<std::bitset<10>> a(n); for (int i = 0; i < n; i++) { int x; std::cin >> x; a[i] = 0; a[i][x] = true; } std::cout << solve(solve, a); 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...