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
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <bits/stdc++.h>
#define lld long long int

using namespace std;
lld ilosczer, licz;
lld N;
lld a;
lld pop;
lld w=0;
lld xd[20];
int main()
{
	xd[0]=1;
	scanf("%lld",&N);
	for(lld i = 1;i<=18;++i)
	{
		xd[i]=xd[i-1]*10;
	}
	for(lld i = 0;i<N;++i)
	{
		scanf("%lld",&a);
		lld dlpop = 0;
		if(pop>0)
		dlpop = (lld)log10(pop)+1;
		lld dla = (lld)log10(a)+1;
		if(a>pop)
		{
			pop*=xd[min((dla-dlpop),ilosczer)];
			if(ilosczer<18)
			{
				pop+=licz/xd[max((ilosczer-(dla-dlpop)),(lld)0)];
			}
			if(pop<a)
			{
				licz=0;
				ilosczer-=(dla-dlpop);
				ilosczer=max((lld)0,ilosczer);
				w+=ilosczer;
			}
			else
			{
				//cout << " jestem " << a << endl;
				if(pop==a)
				{
					ilosczer-=(dla-dlpop);
					ilosczer=max((lld)0,ilosczer);
					if((lld)log10(licz+1)>ilosczer-1)
					{
						++ilosczer;
						licz=0;
						w+=ilosczer;
					}
					else
					{
						w+=ilosczer;
						++licz;
					}
				}
				else
				{
					licz=0;
					ilosczer-=(dla-dlpop);
					ilosczer=max((lld)0,ilosczer);
					++ilosczer;
					w+=ilosczer;
				}
				
			}
		}
		else
		{
			if(pop/xd[(dlpop-dla)]<a)
			{
				licz=0;
				ilosczer+=dlpop-dla;
				w+=ilosczer;
			}
			else
			{
				if(pop/xd[(dlpop-dla)]==a)
				{
					if(dlpop-dla==0)
					{
						if((lld)log10(licz+1)>ilosczer-1)
						{
							++ilosczer;
							licz=0;
							w+=ilosczer;
						}
						else
						{
							w+=ilosczer;
							++licz;
						}
					}
					else
					{
						w+=(dlpop-dla);
						a=pop;
						if((lld)log10(licz+1)>ilosczer-1)
						{
							if((a+1)/xd[dlpop-dla]!=a/xd[dlpop-dla])
							{
								++ilosczer;
								w+=ilosczer;
								licz=0;
							}
							else
							{
								++a;
								w+=ilosczer;
								licz=0;
							}
						}
						else
						{
							w+=ilosczer;
							++licz;
						}
					}
				}
				else
				{
					ilosczer+=1+(dlpop-dla);
					licz=0;
					w+=ilosczer;
				}
			}
		}
		pop=a;
	}
	printf("%lld",w);
}