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