Submission #98865

#TimeUsernameProblemLanguageResultExecution timeMemory
98865SpeedOfMagicSequence (BOI14_sequence)C++17
100 / 100
418 ms2592 KiB
/** MIT License Copyright (c) 2018-2019 Vasilev Daniil **/ #include <bits/stdc++.h> using namespace std; template<typename T> using v = vector<T>; #define int long long typedef long double ld; typedef string str; typedef vector<int> vint; #define rep(a, l, r) for(int a = (l); a < (r); a++) #define pb push_back #define fs first #define sc second #define sz(a) ((int) a.size()) const long long inf = 4611686018427387903; //2^62 - 1 const long double EPS = 1e-10; #if 0 //FileIO const string fileName = ""; ifstream fin ((fileName == "" ? "input.txt" : fileName + ".in" )); ofstream fout((fileName == "" ? "output.txt" : fileName + ".out")); #define get fin >> #define put fout << #else #define get cin >> #define put cout << #endif #define eol put endl void read() {} template<typename Arg,typename... Args> void read (Arg& arg,Args&... args){get (arg) ;read(args...) ;} void print(){} template<typename Arg,typename... Args> void print(Arg arg,Args... args){put (arg)<<" ";print(args...);} int getInt(){int a; get a; return a;} //code starts here v<vint> pos; int ans = inf; bool has(v<char>& a, int d) { for (int i : a) if (i == d) return 1; return 0; } int pw[9] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000}; void solve(vint a, int start, int h = 0, bool lez = 1) { if (sz(a) == 1) { int p = 0; int lz = 0; rep(i, 0, 10) if (a[0] & (1 << i)) { if (i == 0) lz = 1; else if ((1 << i) & a[0]) { p = (p * 10) + i; if (lz) { p *= 10; lz = 0; } } } if (lz) p = 10; if (p == 0 && lez) p = 1; p = p * pw[h] + start; ans = min(ans, p); return; } else if (sz(a) == 2) { //y = 9 for (int i = 0; i < 9; i++) { //because 99 is useless int r = 0; rep(j, 0, 9) if (((1 << j) & a[0]) && j != i) r |= (1 << j); rep(j, 1, 10) if (((1 << j) & a[1]) && j != i + 1) r |= (1 << j); solve({r}, pw[h + 1] * i + pw[h] * 9 + start, h + 2, i == 0 && a[0]); } } rep(y, 0, 10 - (sz(a) == 2)) { vint b; b.pb(0); int d = y; rep(i, 0, sz(a)) { for (int j = 0; j < 10; j++) if (j != d && a[i] & (1 << j)) b.back() |= (1 << j); d = (d + 1) % 10; if (d == 0 && i != sz(a) - 1) b.pb(0); } solve(b, y * pw[h] + start, h + 1, y == 0 && a[0]); } } void run() { int k; get k; vint a(k); rep(i, 0, k) { int d; get d; a[i] = (1 << d); } solve(a, {}); put ans; } /* 61 5 1 2 3 4 6 *//* 89 2 9 9 *//* 8 4 8 9 0 1 *//* 499 5 9 0 5 2 0 *//* 249 5 2 5 2 5 2 *//* 99 5 9 1 1 0 0 */ signed main() {srand(time(0)); ios::sync_with_stdio(0); cin.tie(0); put fixed << setprecision(12); run(); 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...