#include <iostream>
#include <string>
using namespace std;
#define LIMIT (10000000000000000LL) // 10**16
inline bool startswith(string const& a, string const& b) {
if (a.length() < b.length()) return 0;
for (unsigned i = 0; i < b.length(); ++i) {
if (a[i] != b[i]) return 0;
}
return 1;
}
inline bool only9after(string const& a, string const& b) {
for (unsigned i = b.length(); i < a.length(); ++i) {
if (a[i] != '9') return 0;
}
return 1;
}
unsigned long long ans = 0;
int main() {
ios::sync_with_stdio(0);
int n;
cin >> n;
int cur_exp = 0;
unsigned long long cur_val;
cin >> cur_val;
for (int i = 1; i < n; ++i) {
unsigned long long v;
cin >> v;
auto cur_val_str = to_string(cur_val);
auto v_str = to_string(v);
if (startswith(cur_val_str, v_str)) {
if (only9after(cur_val_str, v_str)) {
while (v <= cur_val) {
v *= 10;
++ans;
}
} else {
v = cur_val + 1;
ans += cur_val_str.length() - v_str.length();
}
} else {
while (v <= cur_val) {
v *= 10;
++ans;
}
}
cur_val = v;
ans += cur_exp;
while (cur_val > LIMIT) {
cur_val /= 10;
++cur_exp;
}
}
cout << ans;
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 69 | #include <iostream> #include <string> using namespace std; #define LIMIT (10000000000000000LL) // 10**16 inline bool startswith(string const& a, string const& b) { if (a.length() < b.length()) return 0; for (unsigned i = 0; i < b.length(); ++i) { if (a[i] != b[i]) return 0; } return 1; } inline bool only9after(string const& a, string const& b) { for (unsigned i = b.length(); i < a.length(); ++i) { if (a[i] != '9') return 0; } return 1; } unsigned long long ans = 0; int main() { ios::sync_with_stdio(0); int n; cin >> n; int cur_exp = 0; unsigned long long cur_val; cin >> cur_val; for (int i = 1; i < n; ++i) { unsigned long long v; cin >> v; auto cur_val_str = to_string(cur_val); auto v_str = to_string(v); if (startswith(cur_val_str, v_str)) { if (only9after(cur_val_str, v_str)) { while (v <= cur_val) { v *= 10; ++ans; } } else { v = cur_val + 1; ans += cur_val_str.length() - v_str.length(); } } else { while (v <= cur_val) { v *= 10; ++ans; } } cur_val = v; ans += cur_exp; while (cur_val > LIMIT) { cur_val /= 10; ++cur_exp; } } cout << ans; return 0; } |
English