#include<iostream>
#include<cmath>
#define N 100000000000000
using namespace std;
long long k[200000];
long long c[200000];
long long zera(long long a)
{
long long wynik=10;
long long pom=1;
while(a>1)
{
if(a%2==1)
{
pom*= wynik;
wynik*=wynik;
a--;
a/=2;
}
else
{
wynik*=wynik;
a/=2;
}
}
wynik*=pom;
return wynik;
}
int main()
{
int licznik;
cin >>licznik;
long long wynik = 0;
cin >> k[0];
c[0]=0;
for(int i=1;i<licznik;i++)
{
cin >> k[i];
c[i]=0;
if(k[i-1]>=k[i])
{
long long cyfr1 = floor(log10(k[i-1])+1)+c[i-1];
long long cyfr2 = floor(log10(k[i])+1);
if(cyfr1==cyfr2)
{
wynik++;
k[i]*=10;
}
else
{
long long roz = cyfr1 - cyfr2;
long long rdzen_1 = floor(log10(k[i-1]));
long long rdzen_2 = floor(log10(k[i]));
long long roz2 = rdzen_1 - rdzen_2;
long long pom = k[i-1]/zera(roz2);
if(pom>k[i])
{
k[i]*=zera(roz2+1);
wynik+=roz+1;
c[i]=c[i-1];
}
else if(pom==k[i])
{
long long d = k[i];
k[i]=k[i-1]+1;
wynik+=roz;
c[i]=c[i-1];
if(pom!=floor(k[i]/zera(roz2)))
{
k[i]=d;
wynik++;
k[i]*=zera(roz2+1);
}
}
else if(pom<k[i])
{
k[i]*=zera(roz2);
wynik+=roz;
c[i]=c[i-1];
}
if(k[i]>=N)
{
k[i]/=10000;
c[i]+=4;
}
}
}
}
cout << wynik;
}
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<iostream> #include<cmath> #define N 100000000000000 using namespace std; long long k[200000]; long long c[200000]; long long zera(long long a) { long long wynik=10; long long pom=1; while(a>1) { if(a%2==1) { pom*= wynik; wynik*=wynik; a--; a/=2; } else { wynik*=wynik; a/=2; } } wynik*=pom; return wynik; } int main() { int licznik; cin >>licznik; long long wynik = 0; cin >> k[0]; c[0]=0; for(int i=1;i<licznik;i++) { cin >> k[i]; c[i]=0; if(k[i-1]>=k[i]) { long long cyfr1 = floor(log10(k[i-1])+1)+c[i-1]; long long cyfr2 = floor(log10(k[i])+1); if(cyfr1==cyfr2) { wynik++; k[i]*=10; } else { long long roz = cyfr1 - cyfr2; long long rdzen_1 = floor(log10(k[i-1])); long long rdzen_2 = floor(log10(k[i])); long long roz2 = rdzen_1 - rdzen_2; long long pom = k[i-1]/zera(roz2); if(pom>k[i]) { k[i]*=zera(roz2+1); wynik+=roz+1; c[i]=c[i-1]; } else if(pom==k[i]) { long long d = k[i]; k[i]=k[i-1]+1; wynik+=roz; c[i]=c[i-1]; if(pom!=floor(k[i]/zera(roz2))) { k[i]=d; wynik++; k[i]*=zera(roz2+1); } } else if(pom<k[i]) { k[i]*=zera(roz2); wynik+=roz; c[i]=c[i-1]; } if(k[i]>=N) { k[i]/=10000; c[i]+=4; } } } } cout << wynik; } |
English