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
#include <iostream>
#include <cmath>
using namespace std;

int porownaj(string lp1,string lp2)
{
	int dl1=lp1.size();
	int dl2=lp2.size();
	
	if(dl1>dl2)return -1; //prev wiekszy
	if(dl2>dl1)return 1; //next wiekszy
	
	if(lp1>lp2)return -1; //prev wiekszy
	if(lp2>lp1)return 1; //next wiekszy

	return 0; //prev rowny next
}
	
int main() {
int n;
string next,prev="0";
unsigned long long result=0;
cin>>n;
for(int i=0;i<n;i++)
{
	cin>>next;
	if(porownaj(prev,next)==-1)
	{
		int dl1=prev.size();
		int dl2=next.size();
		string podciag="";
		for(int i=0;i<dl2;i++)
			podciag+=prev[i];
		//porownywanie podciagow rownej dlugosci
		if(next>podciag) //2334 i 234 to wystarczy dopisac tyle zer ile roznica dlugosci
		{
			string add(dl1-dl2,'0');
			prev=next+add;
			result+=dl1-dl2;
		}
		else
		if(next<podciag) //2334 i 232 to wystarczy dopisac tyle zer zeby next byl dluzszy
		{
			string add(dl1-dl2+1,'0');
			prev=next+add;
			result+=dl1-dl2+1;
		}
		else //2334 i 23 podciag jest rowny
		{
			bool ok=false;
			for(int i=dl2;i<dl1;i++)
				if(prev[i]!='9')
				{
					//trzeba dodać +1 do prev;
					int j=dl1-1;
					while(prev[j]=='9')
						prev[j--]='0';
					prev[j]++;
					result+=dl1-dl2;
					ok=true;
					break;	
				}	
			if(!ok)
			{
				string add(dl1-dl2+1,'0');
				prev=next+add;
				result+=dl1-dl2+1;
			}
		}
	}
	else if(prev==next) //gdy sa rowne to dopisujemy 0
	{
		prev+="0";
		result++;
	}
	else
		prev=next;
}
cout<<result<<endl;
}