#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 2e5 + 5;
int tab[MAXN];
inline size_t len(int i) {
return i > 0 ? (int)log10((double) i) + 1 : 1;
}
inline int pref(int a, int b) {
return a / (int)(pow(10, b));
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> tab[i];
}
int ans = 0;
for (int i = 2; i <= n; i++) {
int prv_ = tab[i];
if (tab[i] <= tab[i - 1]) {
int len_prv = len(tab[i - 1]);
int len_ = len(tab[i]);
if (len_ == len_prv) {
tab[i] = tab[i] * 10;
} else { // len(akt) < len(prv)
int pref_prv = pref(tab[i - 1], len_prv - len_);
if (pref_prv < tab[i]) {
tab[i] = tab[i] * pow(10, len_prv - len_);
} else if (pref_prv > tab[i]) {
tab[i] = tab[i] * pow(10, len_prv - len_ + 1);
} else { // najgorszy przypadek
if (tab[i - 1] % 10 < 9) {
tab[i] = tab[i - 1] + 1; // nie przekręci się, bo < 9
} else {
if (len_prv - len_ > 1) {
tab[i] = tab[i - 1] + 1;
} else {
tab[i] = tab[i] * pow(10, len_prv - len_ + 1);
}
}
}
}
}
ans += (len(tab[i]) - len(prv_));
}
cout << ans << "\n";
}
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 | #include <iostream> #include <cmath> using namespace std; const int MAXN = 2e5 + 5; int tab[MAXN]; inline size_t len(int i) { return i > 0 ? (int)log10((double) i) + 1 : 1; } inline int pref(int a, int b) { return a / (int)(pow(10, b)); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> tab[i]; } int ans = 0; for (int i = 2; i <= n; i++) { int prv_ = tab[i]; if (tab[i] <= tab[i - 1]) { int len_prv = len(tab[i - 1]); int len_ = len(tab[i]); if (len_ == len_prv) { tab[i] = tab[i] * 10; } else { // len(akt) < len(prv) int pref_prv = pref(tab[i - 1], len_prv - len_); if (pref_prv < tab[i]) { tab[i] = tab[i] * pow(10, len_prv - len_); } else if (pref_prv > tab[i]) { tab[i] = tab[i] * pow(10, len_prv - len_ + 1); } else { // najgorszy przypadek if (tab[i - 1] % 10 < 9) { tab[i] = tab[i - 1] + 1; // nie przekręci się, bo < 9 } else { if (len_prv - len_ > 1) { tab[i] = tab[i - 1] + 1; } else { tab[i] = tab[i] * pow(10, len_prv - len_ + 1); } } } } } ans += (len(tab[i]) - len(prv_)); } cout << ans << "\n"; } |
English