제출 #11181

#제출 시각아이디문제언어결과실행 시간메모리
11181woqja125Sequence (BOI14_sequence)C++98
0 / 100
72 ms3944 KiB
#include<stdio.h> int d[100001]; long long getAns(int data[], const int n, int depth) { int *arg; long long ans = 102345678900000000ll; if(n==1 || depth > 6) { for(int i=2; i<=n; i++) data[1] |= data[i]; ans = 0; int c = 0; if(data[1] % 2 == 1) { if(data[1] == 1) return 10; else { int i; for(i=1; i<=9; i++) { if(((data[1] >> i) & 1) == 1) { ans = i*10; break; } } for(i++; i<=9; i++) if(((data[1] >> i) & 1) == 1) ans = ans * 10 + i; return ans; } } else { for(int i=0; i<=9; i++) if(((data[1] >> i) & 1) == 1) ans = ans * 10 + i; return ans; } } arg = new int[100001]; int start = 0; for(start = 0; start<=9; start++) { int fd, N; fd = start; arg[N = 1] = 0; for(int i=1; i<=n; i++) { arg[N] |= data[i] & (1023 - (1<<fd)); if(++fd == 10) { fd = 0; arg[++N] = 0; } } long long l = getAns(arg, N, depth + 1); if(ans > l*10 + start) { ans = l*10 + start; } } delete[] arg; return ans; } int main() { int n, i; scanf("%d", &n); for(i=1; i<=n; i++) { scanf("%d", d+i); } /*if(d[1] == 0) { for(i=2; i<=n; i++) { int N = i-1; while(N) { if(N%10 == d[i]) break; N/=10; } if(N==0) break; } if(i==n+1) { printf("0"); return 0; } }*/ for(i=1; i<=n; i++) { d[i] = 1<<d[i]; } long long ans = getAns(d, n, 1); printf("%lld", 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...