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