#include <bits/stdc++.h> using namespace std; #define sz size() #define pb push_back #define mp make_pair typedef long long ll; const ll M = 10e7 + 7; const ll maxn = 200002; const ll P = 1e9+7; ll a,b,c,d,n,m,ans,mod; string aktualny; string liczby[maxn]; void sprawdz(int a){ string s1,s2; s1=liczby[a]; s2=liczby[a+1]; if(s1.sz==s2.sz){ int i=0; while(i<s1.sz&&s1[i]==s2[i]){ i++; } if(i==s1.sz||s1[i]>s2[i]){ //przypadek kiedy slowa sa rownej dlugosci liczby[a+1]+='0'; ans++; } } else{ if(s1.sz>s2.sz){ //s1 jest wieksze ans+=(s1.sz-s2.sz); //napewno trzeba uzupelnic int i=0; int ile_rownych = 0; while(i<s2.sz&&s1[i]==s2[i]){ ile_rownych++; i++; } //cout<<"s1 i s2 roznia sie na pozycji "<<i<<endl; if(ile_rownych==s2.sz){ //przypadek kiedy czlon s2 jest rowny poczatkowemu czlonowi s1 //cout<<"czlony "<<s1<<" "<<s2<<" sa sobie rowne "<<endl; int j = s1.sz-1; while(j>=s2.sz&&s1[j]=='9'){ j--; } if(j==s2.sz-1){ //w koncowke s1 same 9 //cout<<"same 9 ma w koncowkce "<<s1<<endl; while(s2.sz<=s1.sz) s2+='0'; liczby[a+1]=s2; ans++; } else{ s1[j]=char(s1[j]+1); for(int k=s1.sz; k>j; k--){ s1[k]='0'; } liczby[a+1]=s1; } } else{ bool siemka = 0; if(s1[i]>s2[i]) siemka=1; while(s2.sz<s1.sz) s2+='0'; if(siemka){ //czlons s1 jest wiekszy od czlona s2 trzba zwiekszyc wykladnik 10 //cout<<"czlon "<<liczby[a]<<" jest wiekszy od czlona "<<liczby[a+1]<<endl; s2+='0'; ans++; } else{ //cout<<"CZLON "<<liczby[a]<<" jest mniejszy od człona "<<liczby[a+1]<<endl; } liczby[a+1]=s2; } } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=0; i<n; i++) cin>>liczby[i]; for(int i=0; i<n-1; i++){ sprawdz(i); } //for(int i=0; i<n; i++) //cout<<liczby[i]<<endl; cout<<ans; 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 | #include <bits/stdc++.h> using namespace std; #define sz size() #define pb push_back #define mp make_pair typedef long long ll; const ll M = 10e7 + 7; const ll maxn = 200002; const ll P = 1e9+7; ll a,b,c,d,n,m,ans,mod; string aktualny; string liczby[maxn]; void sprawdz(int a){ string s1,s2; s1=liczby[a]; s2=liczby[a+1]; if(s1.sz==s2.sz){ int i=0; while(i<s1.sz&&s1[i]==s2[i]){ i++; } if(i==s1.sz||s1[i]>s2[i]){ //przypadek kiedy slowa sa rownej dlugosci liczby[a+1]+='0'; ans++; } } else{ if(s1.sz>s2.sz){ //s1 jest wieksze ans+=(s1.sz-s2.sz); //napewno trzeba uzupelnic int i=0; int ile_rownych = 0; while(i<s2.sz&&s1[i]==s2[i]){ ile_rownych++; i++; } //cout<<"s1 i s2 roznia sie na pozycji "<<i<<endl; if(ile_rownych==s2.sz){ //przypadek kiedy czlon s2 jest rowny poczatkowemu czlonowi s1 //cout<<"czlony "<<s1<<" "<<s2<<" sa sobie rowne "<<endl; int j = s1.sz-1; while(j>=s2.sz&&s1[j]=='9'){ j--; } if(j==s2.sz-1){ //w koncowke s1 same 9 //cout<<"same 9 ma w koncowkce "<<s1<<endl; while(s2.sz<=s1.sz) s2+='0'; liczby[a+1]=s2; ans++; } else{ s1[j]=char(s1[j]+1); for(int k=s1.sz; k>j; k--){ s1[k]='0'; } liczby[a+1]=s1; } } else{ bool siemka = 0; if(s1[i]>s2[i]) siemka=1; while(s2.sz<s1.sz) s2+='0'; if(siemka){ //czlons s1 jest wiekszy od czlona s2 trzba zwiekszyc wykladnik 10 //cout<<"czlon "<<liczby[a]<<" jest wiekszy od czlona "<<liczby[a+1]<<endl; s2+='0'; ans++; } else{ //cout<<"CZLON "<<liczby[a]<<" jest mniejszy od człona "<<liczby[a+1]<<endl; } liczby[a+1]=s2; } } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=0; i<n; i++) cin>>liczby[i]; for(int i=0; i<n-1; i++){ sprawdz(i); } //for(int i=0; i<n; i++) //cout<<liczby[i]<<endl; cout<<ans; return 0; } |