Submission #230072

#TimeUsernameProblemLanguageResultExecution timeMemory
230072dolphingarlicSequence (BOI14_sequence)C++14
67 / 100
1091 ms1536 KiB
#include <bits/stdc++.h> #define FOR(i, x, y) for (int i = x; i < y; i++) typedef long long ll; using namespace std; ll ans = 1e15, pw[18]; void solve(vector<int> sections, ll curr = 0, int level = 0, bool had_zero = false) { if (curr > ans) return; int n = sections.size(); if (n == 1) { int mask = sections[0]; if (!mask) { if (!curr || had_zero) curr += pw[level]; } else if (mask == 1) curr += pw[level + 1]; else { if (mask & 1) { int mn = 10; for (int i = 9; i; i--) { if (mask & (1 << i)) mn = i; } for (int i = 9; i; i--) { if ((mask & (1 << i)) && i != mn) curr += i * pw[level++]; } curr += mn * pw[++level]; } else { for (int i = 9; i; i--) { if (mask & (1 << i)) curr += i * pw[level++]; } } } ans = min(ans, curr); return; } FOR(i, 0, 10) { vector<int> merged; int ins = 0; bool zero = false; int piv = i; FOR(j, 0, n) { zero |= (piv == 0 && (sections[j] & 1)); ins |= (sections[j] & (~(1 << piv))); piv++; if (piv == 10) { merged.push_back(ins); ins = piv = 0; } } if (piv) merged.push_back(ins); solve(merged, curr + pw[level] * i, level + 1, zero); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> sections(n); FOR(i, 0, n) { int x; cin >> x; sections[i] = 1 << x; } pw[0] = 1; FOR(i, 1, 18) pw[i] = 10 * pw[i - 1]; solve(sections); cout << ans; 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...