#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; } |