Submission #11574

#TimeUsernameProblemLanguageResultExecution timeMemory
11574gs14004Sequence (BOI14_sequence)C++98
67 / 100
1000 ms2144 KiB
#include <cstdio> #include <vector> #include <algorithm> using namespace std; int n; long long res = 1e16, p[17]; void solve(vector<int> bit, long long cb, int depth, int had_zero){ if(cb >= res) return; if(bit.size() == 1){ int r = bit[0]; if(r == 0){ if(cb == 0 || had_zero) cb += p[depth]; } else if(r == 1){ cb += p[depth] * 10; } else{ vector<int> v; for (int i=9; i>=0; i--) { if((r>>i)&1) v.push_back(i); } if(v.back() == 0){ swap(v[v.size() - 2],v.back()); } for (int i=0; i<v.size(); i++) { cb += p[depth] * v[i]; depth++; } } res = min(res,cb); return; } for (int i=0; i<10; i++) { int gz = 0; vector<int> v2; int piv = i; v2.push_back(0); for (int j=0; j<bit.size(); j++) { if(bit[j]&1 && piv == 0) gz = 1; v2.back() |= (bit[j] & (~(1<<piv))); if(piv == 9 && j != bit.size() - 1){ v2.push_back(0); piv = -1; } piv++; } solve(v2,cb + p[depth] * i,depth+1,gz); } } int main(){ vector<int> v; scanf("%d",&n); p[0] = 1; for (int i=1; i<17; i++) { p[i] = p[i-1] * 10; } for (int i=0; i<n; i++) { int t; scanf("%d",&t); v.push_back(1<<t); } solve(v,0,0,0); printf("%lld",res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...