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
64
#include <cstdio>
#define MAXN 200001
#define LIMIT 1000000000000000

long long int n, X[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000,1000000000000000 };
long long int res;

typedef struct complex {
	long long int base = 0, zeros = 0;
} Complex;

Complex C[MAXN];

int next(int a, int b) {
	if (C[a].base < C[b].base) {
		C[b].zeros = C[a].zeros;
		return C[b].zeros;
	}

	long long int i = 0, temp = C[b].base;

	for (; temp <= C[a].base; temp *= 10, i++);
	if (temp / 10 == C[a].base && C[a].zeros) {
		C[b].base = C[a].base;
		C[b].zeros = C[a].zeros;
		return C[b].zeros + i - 1;
	}
	else if (C[a].base - temp / 10 < X[i - 1] - 1) {
		if (C[a].zeros) {
			C[b].base = C[a].base;
			C[b].zeros = C[a].zeros;
			return i - 1 + C[b].zeros;
		}
		else {
			C[b].base = C[a].base + 1;
			return i - 1;
		}
	}
	else {
		if (temp >= LIMIT) {
			C[b].base = temp / 10;
			C[b].zeros = C[a].zeros + 1;
			return i - 1 + C[b].zeros;
		}
		else {
			C[b].base = temp;
			C[b].zeros = C[a].zeros;
			return i + C[b].zeros;
		}
	}
}


int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%lld", &C[i].base);
	for (int i = 1; i < n; i++) {
		int x = next(i - 1, i);
		//printf("%lld + %lld    %d\n", C[i].base, C[i].zeros, x);
		res += x;
	}
	printf("%lld\n", res);
	return 0;
}