#include <bits/stdc++.h> using namespace std; const int N = 305; bool sprawdz = true; int check(string& a, string& b, int dl) { if(a > b) return 0; if(a == b) { if(dl < a.size()) { a.back() = '1'; return 0; } else { if(sprawdz) a += '0'; return 1; } } for(int i =0;i < dl; ++i) if(a[i] != b[i]) { if(sprawdz) a += '0'; return 1; } int poz = -1; for(int i = dl; i < a.size(); ++i) { a[i] = b[i]; if(a[i] != '9') poz = i; } if(poz == -1) { for(int i = dl; i < a.size(); ++i) a[i] = '0'; a += '0'; return 1; } a[poz]++; for(int i = poz + 1; i < a.size(); ++i) a[i]= '0'; return 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long res = 0; int n; cin>>n; string last; cin>>last; int dl =last.size(); for(int i= 1; i < n; ++i) { string cur; cin>>cur; int te = cur.size(); if(cur.size() > last.size()) { dl = cur.size(); last = cur; continue; } cur.resize(last.size(), '0'); int t = check(cur, last, te); if(t == 1) ++dl; res += dl -te; if(cur.size() > 30) sprawdz = 0; last = cur; } cout<<res; }
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <bits/stdc++.h> using namespace std; const int N = 305; bool sprawdz = true; int check(string& a, string& b, int dl) { if(a > b) return 0; if(a == b) { if(dl < a.size()) { a.back() = '1'; return 0; } else { if(sprawdz) a += '0'; return 1; } } for(int i =0;i < dl; ++i) if(a[i] != b[i]) { if(sprawdz) a += '0'; return 1; } int poz = -1; for(int i = dl; i < a.size(); ++i) { a[i] = b[i]; if(a[i] != '9') poz = i; } if(poz == -1) { for(int i = dl; i < a.size(); ++i) a[i] = '0'; a += '0'; return 1; } a[poz]++; for(int i = poz + 1; i < a.size(); ++i) a[i]= '0'; return 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long res = 0; int n; cin>>n; string last; cin>>last; int dl =last.size(); for(int i= 1; i < n; ++i) { string cur; cin>>cur; int te = cur.size(); if(cur.size() > last.size()) { dl = cur.size(); last = cur; continue; } cur.resize(last.size(), '0'); int t = check(cur, last, te); if(t == 1) ++dl; res += dl -te; if(cur.size() > 30) sprawdz = 0; last = cur; } cout<<res; } |