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