#include <iostream> using namespace std; long long pd[20]; int lCyfr(long long l) { for (int i=1; ; ++i) if (l<pd[i]) return i; } long long popraw(long long poprz, long long ta, int &plus, long long &lDopis) { lDopis+=plus; if (poprz<ta) return ta; int lcta=lCyfr(ta); int rlc=lCyfr(poprz)-lcta; long long ta0=ta*pd[rlc]; if (poprz<ta0) { lDopis+=rlc; return ta0; } long long ta9=ta0+pd[rlc]-1; if (poprz<ta9) { lDopis+=rlc; return poprz+1; } lDopis+=rlc+1; int olc=lcta+rlc+1; if (olc<17) return ta0*10; ++plus; return ta0; } int main() { ios_base::sync_with_stdio(false); pd[0]=1; for (int i=1; i<20; ++i) pd[i]=pd[i-1]*10; int n; cin>>n; long long poprz; cin>>poprz; long long wyn=0; int plus=0; for (int i=1; i<n; ++i) { int a; cin>>a; poprz=popraw(poprz, a, plus, wyn); } cout<<wyn<<endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> using namespace std; long long pd[20]; int lCyfr(long long l) { for (int i=1; ; ++i) if (l<pd[i]) return i; } long long popraw(long long poprz, long long ta, int &plus, long long &lDopis) { lDopis+=plus; if (poprz<ta) return ta; int lcta=lCyfr(ta); int rlc=lCyfr(poprz)-lcta; long long ta0=ta*pd[rlc]; if (poprz<ta0) { lDopis+=rlc; return ta0; } long long ta9=ta0+pd[rlc]-1; if (poprz<ta9) { lDopis+=rlc; return poprz+1; } lDopis+=rlc+1; int olc=lcta+rlc+1; if (olc<17) return ta0*10; ++plus; return ta0; } int main() { ios_base::sync_with_stdio(false); pd[0]=1; for (int i=1; i<20; ++i) pd[i]=pd[i-1]*10; int n; cin>>n; long long poprz; cin>>poprz; long long wyn=0; int plus=0; for (int i=1; i<n; ++i) { int a; cin>>a; poprz=popraw(poprz, a, plus, wyn); } cout<<wyn<<endl; return 0; } |