Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
 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
#include <iostream>
#include <math.h>
using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//unsigned long long n, i, a, a_old,ile,suma,a_nowe;       <<---------- by�o i dzia�a�o na liczbach do 10^18
unsigned long long n, i, ile,suma, a, a_old, a_nowe;



unsigned long long dopiszcyfry (unsigned long long b, unsigned long long b_old) //funkcja licz�ca ile minimalnie cyfr doda� do danej b, �eby by�a wi�ksza od starej b_old
{
	unsigned long long zwroc;
	double iledziesiatekwieksza=log10(b_old/b); 
	unsigned long long iledziesiatek=floor(iledziesiatekwieksza);
	
	a_nowe=b*pow(10,iledziesiatek+1);
	
	unsigned long long czy0=floor((b_old+1)/pow(10,iledziesiatek))-b; //sprawdza czy b_old+1 ma taki sam pocz�tek jak b
	if (a_nowe>10*b&&czy0==0) {a_nowe=b_old+1; zwroc=iledziesiatek; } else zwroc=iledziesiatek+1;
	//cout<<"\n"<<b_old<<" jest wieksze od "<< b<<" wiec trzeba dopisac " << zwroc << " liczb i nowa liczba to "<< a_nowe;
	return zwroc;
}



int main(void) 
{
	ios_base::sync_with_stdio(0);
	cin>>n; //n - 10^6 przypadkow
	a_old=0;suma=0;
	for (i=0;i<n;i++)
	{
		cin>>a;
		if (a<=a_old) {ile=dopiszcyfry(a,a_old);suma=suma+ile;a=a_nowe;} //je�eli nast�pna wpisana liczba jest mniejsza od poprzedniej, to dodaje cyfry
		a_old=a;
	}		
	
	cout<<suma;
	return 0;
}