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