#include<stdio.h>
#include<math.h>
int main()
{
long long n,j, a, a_old, m, t, counter = 1, result=0, mult, lenght, maximum=10e17;
long a_len, a_old_len;
scanf("%lld", &n);
scanf("%lld", &m);
//printf("%lld\n", m);
a_old = m;
t = m;
a_old_len = 0;
for(t;t;t/=10, a_old_len++);
for(long i=1; i<n; i++)
{
scanf("%lld", &a);
//printf("%lld\n", a);
t = a;
a_len = 0;
for(t;t;t/=10, a_len++);
if(m<maximum)
{
mult = 1;
counter=0;
a_old = a;
while(m-a>=mult)
{
mult*=10;
a*=10;
counter++;
}
if(m-a>=0)
{
if(counter>0)
{
if((m-a)%mult==mult-1)
{
a*=10;
counter++;
}
else
a+=m-a+1;
}
else
{
a*=10;
counter++;
}
}
result+=counter;
//printf("[%lld][%lld]\n", a, counter);
m = a;
for(t=m,lenght=0;t;t/=10, lenght++);
}else
{
if(a>a_old)
{
t = a;
int a_len = 0;
for(t;t;t/=10, a_len++);
/*t = a_old;
int a_old_len = 0;
for(t;t;t/=10,a_old_len++);
*/
t=a_old;
for(j=0;j<a_len-a_old_len; j++, t*=10);
if(a<t) //bylo <=
{
lenght++;
}
result+=lenght-a_len;
//printf("a. [%lld",a);
//for(j=0;j<lenght-a_len;j++,printf("0"));
//printf("]->[%lld]\n", lenght-a_len);
}else if(a<=a_old)
{
/*t = a_old;
int a_old_len = 0;
for(t;t;t/=10,a_old_len++);*/
t=a;
for(j=0,mult=1;j<a_old_len-a_len; j++, t*=10,mult*=10);
//printf("b. t=%lld mult=%lld\n",t, mult);
if(a_old>t) //bylo >=
{
if(a_old-t+1>=mult)
lenght++;
}
result+=lenght-a_len;
//printf("b. [%lld",a);
//for(j=0;j<lenght-a_len;j++,printf("0"));
//printf("]->[%lld]\n", lenght-a_len);
}
a_old = a;
}
a_old_len = a_len;
}
printf("%lld", result);
return 0;
}
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 | #include<stdio.h> #include<math.h> int main() { long long n,j, a, a_old, m, t, counter = 1, result=0, mult, lenght, maximum=10e17; long a_len, a_old_len; scanf("%lld", &n); scanf("%lld", &m); //printf("%lld\n", m); a_old = m; t = m; a_old_len = 0; for(t;t;t/=10, a_old_len++); for(long i=1; i<n; i++) { scanf("%lld", &a); //printf("%lld\n", a); t = a; a_len = 0; for(t;t;t/=10, a_len++); if(m<maximum) { mult = 1; counter=0; a_old = a; while(m-a>=mult) { mult*=10; a*=10; counter++; } if(m-a>=0) { if(counter>0) { if((m-a)%mult==mult-1) { a*=10; counter++; } else a+=m-a+1; } else { a*=10; counter++; } } result+=counter; //printf("[%lld][%lld]\n", a, counter); m = a; for(t=m,lenght=0;t;t/=10, lenght++); }else { if(a>a_old) { t = a; int a_len = 0; for(t;t;t/=10, a_len++); /*t = a_old; int a_old_len = 0; for(t;t;t/=10,a_old_len++); */ t=a_old; for(j=0;j<a_len-a_old_len; j++, t*=10); if(a<t) //bylo <= { lenght++; } result+=lenght-a_len; //printf("a. [%lld",a); //for(j=0;j<lenght-a_len;j++,printf("0")); //printf("]->[%lld]\n", lenght-a_len); }else if(a<=a_old) { /*t = a_old; int a_old_len = 0; for(t;t;t/=10,a_old_len++);*/ t=a; for(j=0,mult=1;j<a_old_len-a_len; j++, t*=10,mult*=10); //printf("b. t=%lld mult=%lld\n",t, mult); if(a_old>t) //bylo >= { if(a_old-t+1>=mult) lenght++; } result+=lenght-a_len; //printf("b. [%lld",a); //for(j=0;j<lenght-a_len;j++,printf("0")); //printf("]->[%lld]\n", lenght-a_len); } a_old = a; } a_old_len = a_len; } printf("%lld", result); return 0; } |
English