#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 */ |