#include <bits/stdc++.h>
#define f first
#define s second
#define LL long long
#define ALL(V) V.begin(),V.end()
#define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define endl "\n"
#define debug(x) cerr<<#x<<": "<<x<<endl
using namespace std;
const LL N=1e6+69, base=1024*1024,mod=1e9+7;
string t[N];
int lenght[N], n;
long long wynik;
bool isBigger(int v) {
if(t[v].size()>t[v-1].size()) return true;
if(t[v].size()<t[v-1].size()) return false;
for(int i = 0; i < (int)t[v].size(); i++) {
if(t[v][i] > t[v-1][i]) return true;
if(t[v][i] < t[v-1][i]) return false;
}
return false;
}
bool isSmaller(int v) {
for(int i = 0; i < min((int)t[v].size(), (int)t[v-1].size()); i++) {
if(t[v][i] < t[v-1][i]) return true;
if(t[v][i] > t[v-1][i]) return false;
}
return false;
}
int por(int v,int dl) { //1 = wiekszy
for(int i=0;i<dl;i++) {
if(t[v][i] > t[v-1][i]) return 1;
if(t[v][i] < t[v-1][i]) return -1;
}
return 0;
}
void addOne(int v) {
for(int i=t[v].size()-1;i>=0;i--) {
if(t[v][i]!='9') {
t[v][i]++;
return;
}
t[v][i]='0';
}
}
int32_t main(void) {
boost;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>t[i];
lenght[i]=t[i].size();
}
int akt=1;
while(akt<n&&t[akt].size()<18) {
akt++;
if(isBigger(akt)) continue;
int dl=t[akt].size();
while(t[akt].size()<t[akt-1].size()) t[akt].push_back('0'), wynik++;
if(por(akt,dl)==1) continue;
if(por(akt,dl)==-1) {
wynik++;
t[akt].push_back('0');
continue;
}
for(int i=dl;i<t[akt].size();i++)
if(t[akt-1][i]!='9') {
t[akt]=t[akt-1];
addOne(akt);
break;
}
if(isBigger(akt)==false) t[akt].push_back('0'), wynik++;
}
lenght[akt]=t[akt].size();
while(akt<n) {
akt++;
wynik+=(lenght[akt-1]-lenght[akt]);
lenght[akt]=lenght[akt-1];
if(t[akt-1].size()>t[akt].size() && por(akt,(int)t[akt].size())==0) t[akt]=t[akt-1];
if(isSmaller(akt) == true) wynik++, lenght[akt]++;
}
cout<<wynik<<endl;
}
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 | #include <bits/stdc++.h> #define f first #define s second #define LL long long #define ALL(V) V.begin(),V.end() #define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define endl "\n" #define debug(x) cerr<<#x<<": "<<x<<endl using namespace std; const LL N=1e6+69, base=1024*1024,mod=1e9+7; string t[N]; int lenght[N], n; long long wynik; bool isBigger(int v) { if(t[v].size()>t[v-1].size()) return true; if(t[v].size()<t[v-1].size()) return false; for(int i = 0; i < (int)t[v].size(); i++) { if(t[v][i] > t[v-1][i]) return true; if(t[v][i] < t[v-1][i]) return false; } return false; } bool isSmaller(int v) { for(int i = 0; i < min((int)t[v].size(), (int)t[v-1].size()); i++) { if(t[v][i] < t[v-1][i]) return true; if(t[v][i] > t[v-1][i]) return false; } return false; } int por(int v,int dl) { //1 = wiekszy for(int i=0;i<dl;i++) { if(t[v][i] > t[v-1][i]) return 1; if(t[v][i] < t[v-1][i]) return -1; } return 0; } void addOne(int v) { for(int i=t[v].size()-1;i>=0;i--) { if(t[v][i]!='9') { t[v][i]++; return; } t[v][i]='0'; } } int32_t main(void) { boost; cin>>n; for(int i=1;i<=n;i++) { cin>>t[i]; lenght[i]=t[i].size(); } int akt=1; while(akt<n&&t[akt].size()<18) { akt++; if(isBigger(akt)) continue; int dl=t[akt].size(); while(t[akt].size()<t[akt-1].size()) t[akt].push_back('0'), wynik++; if(por(akt,dl)==1) continue; if(por(akt,dl)==-1) { wynik++; t[akt].push_back('0'); continue; } for(int i=dl;i<t[akt].size();i++) if(t[akt-1][i]!='9') { t[akt]=t[akt-1]; addOne(akt); break; } if(isBigger(akt)==false) t[akt].push_back('0'), wynik++; } lenght[akt]=t[akt].size(); while(akt<n) { akt++; wynik+=(lenght[akt-1]-lenght[akt]); lenght[akt]=lenght[akt-1]; if(t[akt-1].size()>t[akt].size() && por(akt,(int)t[akt].size())==0) t[akt]=t[akt-1]; if(isSmaller(akt) == true) wynik++, lenght[akt]++; } cout<<wynik<<endl; } |
English