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
#include <cstdio>
#include <cstring>

using namespace std;

int min(int a, int b){
	if(a<b) return a;
	else return b;
}

int main(){
	int ile, dl, dl_poprz = 0, j, comp, dl2;
	long long int licz = 0;
	bool przel = false;
	char str[35], poprz[35];
	scanf("%d", &ile);
	for(int i=0; i<ile; i++){
		scanf("%s", str);
		//printf("%s: ", str); 
		dl = strlen(str);
		dl2 = strlen(poprz);
		if(przel){
			comp = strncmp(str, poprz, min(dl, dl2));
			if(comp>=0){
				licz += dl_poprz - dl;
				//jezeli poprzedni poczatek jest dluzszy niz nowy poczatek, np. 291 --> 2
				if(comp == 0 && dl2 > dl)
					strcpy(str, poprz);
				dl = dl_poprz;
			}
			else {
				licz += dl_poprz - dl + 1;
				dl = dl_poprz + 1;
			}
			
		}
		else {
			if(dl > dl_poprz){
				//kolejna liczba ma wiecej cyfr wiec jest wieksza - ok 
				
			}
			else if(dl == dl_poprz){
				//kolejna liczba ma tyle samo cyfr, sprawdzam czy jest wieksza 
				comp = strcmp(str, poprz);
				if(comp>0){
					//jest wieksza - ok, nic nie robie
				}
				else if(comp<=0){
				//jest mniejsza lub rowna - musze dodac 0 na koncu
					licz+=1;
					str[dl] = '0';
					str[dl+1] = 0;
					dl++;
				}
			}
			else {
				//kolejna liczba ma mniej cyfr od poprzedniej
				//sprawdzam poczatek
				comp = strncmp(str, poprz, dl);
				if(comp>0){
				//poczatek jest wiekszy - uzupelniam zerami
					licz += dl_poprz - dl;
                    		       	for(int q=dl; q<dl_poprz; q++) str[q] = '0';
					dl = dl_poprz;
					str[dl_poprz] = 0;
				}
				else if(comp<0){
					//poczatek jest mniejszy - uzupelniam zerami az liczba bedzie dluzsza
					licz += dl_poprz - dl + 1;
					for(int q=dl; q<=dl_poprz; q++) str[q] = '0';
					str[dl_poprz+1] = 0;
					dl = dl_poprz + 1;
				}
				else {
					//poczatek jest taki sam 
					//biore koncowke poprzedniej liczby i dodaje do niej jeden
					licz += dl_poprz - dl;
					for(j=dl_poprz-1;j>=dl;j--){
						if(poprz[j] != '9') {
							str[j] = poprz[j]+1;
							for(int q=j+1; q<dl_poprz; q++) str[q] = '0';
							for(int q=dl; q<j; q++) str[q] = poprz[q];
							str[dl_poprz] = 0;
							dl = dl_poprz;
							break;
						}
						str[j] = poprz[j];
                	                        if(j == dl){
                        	                        //dodaje zero na koncu
                                	                for(int q=j; q<=dl_poprz; q++) str[q] = '0';
                                        	        str[dl_poprz+1] = 0;
                                                	dl = dl_poprz + 1;
                       		                        licz++;
                                	                break;
                                        	}
					}
				}	
			}	
		}
		dl_poprz = dl;
		if(dl >= 30) przel = true;
		strcpy(poprz, str); 
	}
	printf("%lld", licz);
	return 0;
}