#include <bits/stdc++.h> #define int long long using namespace std; int por(string &a, string &s) { int n = min(a.size(), s.size()); for (int i = 0; i < n; i++) { if (a[i] < s[i]) return 1; if (a[i] > s[i]) return -1; } return 0; } int dopisz(string &a, string &s) { if (a.size() < s.size()) return 0; int cp = por(a, s); if (a.size() == s.size()) { if (cp == 1) return 0; s.push_back('0'); return 1; } int siz = s.size(); if (cp != 0) { while (a.size() > s.size()) s.push_back('0'); if (cp == -1) s.push_back('0'); return s.size() - siz; } s = a; int ls = -1; for (int i = siz; i < (int)a.size(); i++) if (a[i] != '9') ls = i; if (ls == -1) s.push_back('0'); else s[ls]++; return s.size() - siz; } main() { ios_base::sync_with_stdio(false); int n; cin >> n; string T[n]; for (int i = 0; i < n; i++) cin >> T[i]; int lastd = 0, res = 0, maxd = 0; for (int i = 1; i < n; i++) { int tmpd; if (maxd < 20) tmpd = dopisz(T[i - 1], T[i]); else { if(T[i - 1].size() > 20) tmpd = T[i - 1].size() - T[i].size(); else tmpd = lastd + T[i - 1].size() - T[i].size(); int cp = por(T[i - 1], T[i]); if (cp == -1) tmpd++; } lastd = tmpd; maxd = max(lastd, maxd); res += lastd; } cout << res << endl; 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 70 71 72 73 74 75 76 77 78 | #include <bits/stdc++.h> #define int long long using namespace std; int por(string &a, string &s) { int n = min(a.size(), s.size()); for (int i = 0; i < n; i++) { if (a[i] < s[i]) return 1; if (a[i] > s[i]) return -1; } return 0; } int dopisz(string &a, string &s) { if (a.size() < s.size()) return 0; int cp = por(a, s); if (a.size() == s.size()) { if (cp == 1) return 0; s.push_back('0'); return 1; } int siz = s.size(); if (cp != 0) { while (a.size() > s.size()) s.push_back('0'); if (cp == -1) s.push_back('0'); return s.size() - siz; } s = a; int ls = -1; for (int i = siz; i < (int)a.size(); i++) if (a[i] != '9') ls = i; if (ls == -1) s.push_back('0'); else s[ls]++; return s.size() - siz; } main() { ios_base::sync_with_stdio(false); int n; cin >> n; string T[n]; for (int i = 0; i < n; i++) cin >> T[i]; int lastd = 0, res = 0, maxd = 0; for (int i = 1; i < n; i++) { int tmpd; if (maxd < 20) tmpd = dopisz(T[i - 1], T[i]); else { if(T[i - 1].size() > 20) tmpd = T[i - 1].size() - T[i].size(); else tmpd = lastd + T[i - 1].size() - T[i].size(); int cp = por(T[i - 1], T[i]); if (cp == -1) tmpd++; } lastd = tmpd; maxd = max(lastd, maxd); res += lastd; } cout << res << endl; return 0; } |