#include <iostream> using namespace std; long long n; long long tab[200001][3]; long long w=0,m=0; const long long N=1e11; long long lg(long long a){ long long l=0; while(a){ l++; a/=10; } return l; } long long p(long long b){ long long l=1; for(int i=0;i<b;i++) l*=10; return l; } int mnr(int j,int k){ //1 - rownosc 2- mniejszy //cout<<tab[j][0]<<"_"<<tab[k][0]*p(tab[k][1]-tab[j][1])<<endl; //cout<<tab[j][1]+lg(tab[j][0])-lg(tab[k][0])<<"-"<<tab[k][1]<<endl; if(tab[j][1]+lg(tab[j][0])-lg(tab[k][0])<tab[k][1]) return 2; else if(tab[j][1]+lg(tab[j][0])-lg(tab[k][0])==tab[k][1]){ //m=max(m,tab[j][1]-tab[k][1]); //m=max(m,tab[k][1]-tab[j][1]); if(tab[j][1]-tab[k][1]>=0 && tab[j][0]*p(tab[j][1]-tab[k][1])<tab[k][0]) return 2; else if(tab[j][1]-tab[k][1]>=0 && tab[j][0]*p(tab[j][1]-tab[k][1])==tab[k][0]) return 1; else if(tab[j][1]-tab[k][1]<=0 && tab[j][0]<tab[k][0]*p(tab[k][1]-tab[j][1])) return 2; else if(tab[j][1]-tab[k][1]<=0 && tab[j][0]==tab[k][0]*p(tab[k][1]-tab[j][1])) return 1; else if(tab[j][0]*p(tab[j][1]-tab[k][1])==tab[k][0]) if(tab[j][2]<tab[k][2]) return 2; } return 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); /*tab[0][0]=10000; tab[0][1]=0; tab[1][0]=1000; tab[1][1]=1; cout<<mnr(1,0)<<endl; */ cin>>n; for(int i=0;i<n;i++) cin>>tab[i][0]; for(int i=1;i<n;i++){ if(mnr(i,i-1)){ if(!tab[i-1][1]){ long long d=lg(tab[i-1][0])-lg(tab[i][0]); w+=d; tab[i][0]*=p(d); if(tab[i-1][0]-tab[i][0]>=p(d)-1){ w++; if(tab[i][0]>=N) tab[i][1]++; else tab[i][0]*=10; }else if(tab[i-1][0]-tab[i][0]>=0) tab[i][0]=tab[i-1][0]+1; }else{ tab[i][1]=tab[i-1][1]+lg(tab[i-1][0])-lg(tab[i][0]); // w+=tab[i][1]; //cout<<w<<endl; //cout<<"_"<<tab[i][1]<<endl; if(mnr(i,i-1)){ //cout<<"___"<<(mnr(i,i-1))<<endl; if(mnr(i,i-1)==2 || (tab[i][1]<=18 && tab[i-1][2]+1==p(tab[i][1]))){ //w++; tab[i][1]++; }else tab[i][2]=tab[i-1][2]+1; } w+=tab[i][1]; //cout<<w<<endl; } } } //long long ww=0; //for(int i=0;i<n;i++){ //cout<<tab[i][0]<<"-"<<tab[i][1]<<"-"<<tab[i][2]<<endl; //ww+=tab[i][1]; //} /*for(int i=1;i<n;i++) if(tab[i][0]==tab[i-1][0]) cout<<tab[i][0]<<"-"<<tab[i][1]<<"-"<<tab[i][2]<<"\n"<<tab[i-1][0]<<"-"<<tab[i-1][1]<<"-"<<tab[i-1][2]<<endl;*/ //cout<<ww<<endl; cout<<w<<endl; 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #include <iostream> using namespace std; long long n; long long tab[200001][3]; long long w=0,m=0; const long long N=1e11; long long lg(long long a){ long long l=0; while(a){ l++; a/=10; } return l; } long long p(long long b){ long long l=1; for(int i=0;i<b;i++) l*=10; return l; } int mnr(int j,int k){ //1 - rownosc 2- mniejszy //cout<<tab[j][0]<<"_"<<tab[k][0]*p(tab[k][1]-tab[j][1])<<endl; //cout<<tab[j][1]+lg(tab[j][0])-lg(tab[k][0])<<"-"<<tab[k][1]<<endl; if(tab[j][1]+lg(tab[j][0])-lg(tab[k][0])<tab[k][1]) return 2; else if(tab[j][1]+lg(tab[j][0])-lg(tab[k][0])==tab[k][1]){ //m=max(m,tab[j][1]-tab[k][1]); //m=max(m,tab[k][1]-tab[j][1]); if(tab[j][1]-tab[k][1]>=0 && tab[j][0]*p(tab[j][1]-tab[k][1])<tab[k][0]) return 2; else if(tab[j][1]-tab[k][1]>=0 && tab[j][0]*p(tab[j][1]-tab[k][1])==tab[k][0]) return 1; else if(tab[j][1]-tab[k][1]<=0 && tab[j][0]<tab[k][0]*p(tab[k][1]-tab[j][1])) return 2; else if(tab[j][1]-tab[k][1]<=0 && tab[j][0]==tab[k][0]*p(tab[k][1]-tab[j][1])) return 1; else if(tab[j][0]*p(tab[j][1]-tab[k][1])==tab[k][0]) if(tab[j][2]<tab[k][2]) return 2; } return 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); /*tab[0][0]=10000; tab[0][1]=0; tab[1][0]=1000; tab[1][1]=1; cout<<mnr(1,0)<<endl; */ cin>>n; for(int i=0;i<n;i++) cin>>tab[i][0]; for(int i=1;i<n;i++){ if(mnr(i,i-1)){ if(!tab[i-1][1]){ long long d=lg(tab[i-1][0])-lg(tab[i][0]); w+=d; tab[i][0]*=p(d); if(tab[i-1][0]-tab[i][0]>=p(d)-1){ w++; if(tab[i][0]>=N) tab[i][1]++; else tab[i][0]*=10; }else if(tab[i-1][0]-tab[i][0]>=0) tab[i][0]=tab[i-1][0]+1; }else{ tab[i][1]=tab[i-1][1]+lg(tab[i-1][0])-lg(tab[i][0]); // w+=tab[i][1]; //cout<<w<<endl; //cout<<"_"<<tab[i][1]<<endl; if(mnr(i,i-1)){ //cout<<"___"<<(mnr(i,i-1))<<endl; if(mnr(i,i-1)==2 || (tab[i][1]<=18 && tab[i-1][2]+1==p(tab[i][1]))){ //w++; tab[i][1]++; }else tab[i][2]=tab[i-1][2]+1; } w+=tab[i][1]; //cout<<w<<endl; } } } //long long ww=0; //for(int i=0;i<n;i++){ //cout<<tab[i][0]<<"-"<<tab[i][1]<<"-"<<tab[i][2]<<endl; //ww+=tab[i][1]; //} /*for(int i=1;i<n;i++) if(tab[i][0]==tab[i-1][0]) cout<<tab[i][0]<<"-"<<tab[i][1]<<"-"<<tab[i][2]<<"\n"<<tab[i-1][0]<<"-"<<tab[i-1][1]<<"-"<<tab[i-1][2]<<endl;*/ //cout<<ww<<endl; cout<<w<<endl; return 0; } |