#include <iostream>
#define ULL unsigned long long
using namespace std;
int ile_cyfr(int a){
int ile=1;
while(a/10>0){
++ile;
a/=10;
}
return ile;
}
ULL pow_10(int a){
ULL wynik=1;
for(int i=0;i<a;++i)wynik*=10;
return wynik;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int n;
cin>>n;
ULL before, next, wynik=0;
//ULL tab[n], dodaj[n], tab2[n];
cin>>before;
int ile_cyfr_before=ile_cyfr(before);
for(int i=0;i<n-1;++i){
cin>>next;
int ile_cyfr_next=ile_cyfr(next);
if(ile_cyfr_before<16){
//silnie rosn¹ce
if(next>before){
before=next;
ile_cyfr_before=ile_cyfr_next;
}else if(ile_cyfr_next==ile_cyfr_before){
next*=10;
++wynik;
before=next;
++ile_cyfr_before;
}else{
ULL pow=pow_10(ile_cyfr_before-ile_cyfr_next);
ULL cut_before=before/pow;
if(cut_before==next){
before=before+1;
ile_cyfr_before=ile_cyfr(before);
wynik+=(ile_cyfr_before-ile_cyfr_next);
}else if(cut_before>next){
wynik+=(ile_cyfr_before-ile_cyfr_next)+1;
next*=pow;
next*=10;
before=next;
++ile_cyfr_before;
}else if(cut_before<next){
wynik+=(ile_cyfr_before-ile_cyfr_next);
next*=pow;
before=next;
}
}
}else{
//s³abo rosnace
ULL pow=pow_10(16-ile_cyfr_next);
ULL cut_before=before/pow;
if(cut_before==next){
wynik+=ile_cyfr_before-ile_cyfr_next;
}else if(cut_before>next){
wynik+=ile_cyfr_before-ile_cyfr_next+1;
next*=pow;
before=next;
++ile_cyfr_before;
}else if(cut_before<next){
wynik+=(ile_cyfr_before-ile_cyfr_next);
next*=pow;
before=next;
}
}
//tab[i]=before;
//dodaj[i]=wynik;
//tab2[i]=ile_cyfr_before;
}
//cout<<"\n";
//for(int i=0;i<n-1;++i)cout<<tab[i]<<" "<<dodaj[i]<<" "<<tab2[i]<<"\n";
cout<<wynik;
return 0;
}
/*
3
8
5
13
*/
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 | #include <iostream> #define ULL unsigned long long using namespace std; int ile_cyfr(int a){ int ile=1; while(a/10>0){ ++ile; a/=10; } return ile; } ULL pow_10(int a){ ULL wynik=1; for(int i=0;i<a;++i)wynik*=10; return wynik; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int n; cin>>n; ULL before, next, wynik=0; //ULL tab[n], dodaj[n], tab2[n]; cin>>before; int ile_cyfr_before=ile_cyfr(before); for(int i=0;i<n-1;++i){ cin>>next; int ile_cyfr_next=ile_cyfr(next); if(ile_cyfr_before<16){ //silnie rosn¹ce if(next>before){ before=next; ile_cyfr_before=ile_cyfr_next; }else if(ile_cyfr_next==ile_cyfr_before){ next*=10; ++wynik; before=next; ++ile_cyfr_before; }else{ ULL pow=pow_10(ile_cyfr_before-ile_cyfr_next); ULL cut_before=before/pow; if(cut_before==next){ before=before+1; ile_cyfr_before=ile_cyfr(before); wynik+=(ile_cyfr_before-ile_cyfr_next); }else if(cut_before>next){ wynik+=(ile_cyfr_before-ile_cyfr_next)+1; next*=pow; next*=10; before=next; ++ile_cyfr_before; }else if(cut_before<next){ wynik+=(ile_cyfr_before-ile_cyfr_next); next*=pow; before=next; } } }else{ //s³abo rosnace ULL pow=pow_10(16-ile_cyfr_next); ULL cut_before=before/pow; if(cut_before==next){ wynik+=ile_cyfr_before-ile_cyfr_next; }else if(cut_before>next){ wynik+=ile_cyfr_before-ile_cyfr_next+1; next*=pow; before=next; ++ile_cyfr_before; }else if(cut_before<next){ wynik+=(ile_cyfr_before-ile_cyfr_next); next*=pow; before=next; } } //tab[i]=before; //dodaj[i]=wynik; //tab2[i]=ile_cyfr_before; } //cout<<"\n"; //for(int i=0;i<n-1;++i)cout<<tab[i]<<" "<<dodaj[i]<<" "<<tab2[i]<<"\n"; cout<<wynik; return 0; } /* 3 8 5 13 */ |
English