#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; } |
English