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