#include<iostream>
using namespace std;
const long long duzy=1e16;
const long long val=1e9;
long long dp,n,x,wynik,ilecyfr;
int cmp,roz;
inline int cyfry(long long x){
int wynik=0;
while(x>0){
++wynik;
x/=10;
}
return wynik;
}
inline int porownaj(long long a,long long b){
//1-wiekszy 0-rowny -1-mniejszy
if(a<b)return 1;
roz=cyfry(a)-cyfry(b);
for(int i=0;i<roz;++i){
a/=10;
}
if(a<b)return 1;
else if(a>b)return -1;
return 0;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>x;
dp=x;
ilecyfr=cyfry(dp);
for(long long i=1;i<n;++i){
cin>>x;
cmp=porownaj(dp,x);
if(cmp==1){
int ile=ilecyfr-cyfry(x);
dp=x;
wynik+=max(ile,0);
for(int i=0;i<ile;++i){
if(dp<duzy)dp*=10;
else break;
}
ilecyfr=cyfry(x)+max(ile,0);
}
else if(cmp==-1){
++ilecyfr;
dp=x;
int ile=ilecyfr-cyfry(x);
wynik+=max(ile,0);
for(int i=0;i<ile;++i){
if(dp<duzy)dp*=10;
else break;
}
}
else{
if(dp>=duzy){
wynik+=ilecyfr-cyfry(x);
}
else{
if(porownaj(dp+1,x)==0){
wynik+=ilecyfr-cyfry(x);
++dp;
}
else{
++ilecyfr;
int ile=ilecyfr-cyfry(x);
dp=x;
wynik+=max(ile,0);
for(int i=0;i<ile;++i){
if(dp<duzy)dp*=10;
else break;
}
}
}
}
// cerr<<"\n "<<dp<<"\n";
}
cout<<wynik;
}
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 | #include<iostream> using namespace std; const long long duzy=1e16; const long long val=1e9; long long dp,n,x,wynik,ilecyfr; int cmp,roz; inline int cyfry(long long x){ int wynik=0; while(x>0){ ++wynik; x/=10; } return wynik; } inline int porownaj(long long a,long long b){ //1-wiekszy 0-rowny -1-mniejszy if(a<b)return 1; roz=cyfry(a)-cyfry(b); for(int i=0;i<roz;++i){ a/=10; } if(a<b)return 1; else if(a>b)return -1; return 0; } int main(){ ios::sync_with_stdio(false); cin>>n>>x; dp=x; ilecyfr=cyfry(dp); for(long long i=1;i<n;++i){ cin>>x; cmp=porownaj(dp,x); if(cmp==1){ int ile=ilecyfr-cyfry(x); dp=x; wynik+=max(ile,0); for(int i=0;i<ile;++i){ if(dp<duzy)dp*=10; else break; } ilecyfr=cyfry(x)+max(ile,0); } else if(cmp==-1){ ++ilecyfr; dp=x; int ile=ilecyfr-cyfry(x); wynik+=max(ile,0); for(int i=0;i<ile;++i){ if(dp<duzy)dp*=10; else break; } } else{ if(dp>=duzy){ wynik+=ilecyfr-cyfry(x); } else{ if(porownaj(dp+1,x)==0){ wynik+=ilecyfr-cyfry(x); ++dp; } else{ ++ilecyfr; int ile=ilecyfr-cyfry(x); dp=x; wynik+=max(ile,0); for(int i=0;i<ile;++i){ if(dp<duzy)dp*=10; else break; } } } } // cerr<<"\n "<<dp<<"\n"; } cout<<wynik; } |
English