#include <iostream> #include <string> #include <sstream> using namespace std; int len(int x) { int res = 1; while (x /= 10) res++; return res; } struct Num { int pref, add_digits, suf; Num(int x): pref(x), add_digits(0), suf(0) {} Num(int x, int add): pref(x), add_digits(add), suf(0) {} string to_string() const { stringstream ss; ss << pref; if (add_digits > 0) { int zeros = min(10, add_digits - ::len(suf)); for (int i=0; i<zeros; i++) ss << "0"; ss << suf; } return ss.str(); } int len() { return ::len(pref) + add_digits; } void increment() { if (add_digits == 0) { pref++; } else { suf++; if (::len(suf) > add_digits) { pref++; suf = 0; } } } }; int cmp_lex(int x, const Num &y) { stringstream ss; ss << x; string xs = ss.str(); string ys = y.to_string(); for (int i=0; i<xs.length(); i++) { if (i >= ys.length()) return 1; if (xs[i] < ys[i]) return -1; if (xs[i] > ys[i]) return 1; } return 0; } int main() { ios_base::sync_with_stdio(0); int n, a; long long res = 0; cin >> n; auto cur = Num(0); while (n--) { cin >> a; int cmp = cmp_lex(a, cur); if (cmp < 0) { cur = Num(a, max(0, cur.len() - len(a) + 1)); } else if (cmp > 0) { cur = Num(a, max(0, cur.len() - len(a))); } res += cur.len() - len(a); cur.increment(); } cout << res << "\n"; return 0; }
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 | #include <iostream> #include <string> #include <sstream> using namespace std; int len(int x) { int res = 1; while (x /= 10) res++; return res; } struct Num { int pref, add_digits, suf; Num(int x): pref(x), add_digits(0), suf(0) {} Num(int x, int add): pref(x), add_digits(add), suf(0) {} string to_string() const { stringstream ss; ss << pref; if (add_digits > 0) { int zeros = min(10, add_digits - ::len(suf)); for (int i=0; i<zeros; i++) ss << "0"; ss << suf; } return ss.str(); } int len() { return ::len(pref) + add_digits; } void increment() { if (add_digits == 0) { pref++; } else { suf++; if (::len(suf) > add_digits) { pref++; suf = 0; } } } }; int cmp_lex(int x, const Num &y) { stringstream ss; ss << x; string xs = ss.str(); string ys = y.to_string(); for (int i=0; i<xs.length(); i++) { if (i >= ys.length()) return 1; if (xs[i] < ys[i]) return -1; if (xs[i] > ys[i]) return 1; } return 0; } int main() { ios_base::sync_with_stdio(0); int n, a; long long res = 0; cin >> n; auto cur = Num(0); while (n--) { cin >> a; int cmp = cmp_lex(a, cur); if (cmp < 0) { cur = Num(a, max(0, cur.len() - len(a) + 1)); } else if (cmp > 0) { cur = Num(a, max(0, cur.len() - len(a))); } res += cur.len() - len(a); cur.increment(); } cout << res << "\n"; return 0; } |