#include <bits/stdc++.h> using namespace std; typedef long long ll; int last[20]; int main() { ios_base::sync_with_stdio(0); int N; cin >> N; ll ans = 0; int len = 0; for(int i = 1; i <= N; i++) { //cout << "poprzednia: "; for(int j = 0; j < len; j++) { // cout << last[j]; } //cout << endl; int a; cin >> a; vector<int> V; int temp = a; while(temp > 0) { V.push_back(temp % 10); temp /= 10; } reverse(V.begin(), V.end()); if(V.size() > len) { len = V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; continue; } int jaki = 0; //1- my wieksi for(int j = 0; j < V.size(); j++) { if(V[j] > last[j]) { jaki = 1; break; } else if(V[j] < last[j]) { jaki = -1; break; } } if(jaki == 1) { ans += len - V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; for(int j = V.size(); j < min(len, 17); j++) last[j] = 0; } else if(jaki == -1) { len++; ans += len - V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; for(int j = V.size(); j < min(len, 17); j++) last[j] = 0; } else { if(len == V.size()) { last[len] = 0; len++; ans++; continue; } last[min(len - 1, 17)]++; for(int j = min(len - 1, 17); j >= V.size() + 1; j--) { if(last[j] == 10) { last[j - 1]++; last[j] = 0; } } if(last[V.size()] == 10) { len++; for(int j = V.size(); j < len; j++) last[j] = 0; } ans += len - V.size(); } } cout << ans << "\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 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 100 101 102 103 104 105 106 107 108 109 110 111 | #include <bits/stdc++.h> using namespace std; typedef long long ll; int last[20]; int main() { ios_base::sync_with_stdio(0); int N; cin >> N; ll ans = 0; int len = 0; for(int i = 1; i <= N; i++) { //cout << "poprzednia: "; for(int j = 0; j < len; j++) { // cout << last[j]; } //cout << endl; int a; cin >> a; vector<int> V; int temp = a; while(temp > 0) { V.push_back(temp % 10); temp /= 10; } reverse(V.begin(), V.end()); if(V.size() > len) { len = V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; continue; } int jaki = 0; //1- my wieksi for(int j = 0; j < V.size(); j++) { if(V[j] > last[j]) { jaki = 1; break; } else if(V[j] < last[j]) { jaki = -1; break; } } if(jaki == 1) { ans += len - V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; for(int j = V.size(); j < min(len, 17); j++) last[j] = 0; } else if(jaki == -1) { len++; ans += len - V.size(); for(int j = 0; j < V.size(); j++) last[j] = V[j]; for(int j = V.size(); j < min(len, 17); j++) last[j] = 0; } else { if(len == V.size()) { last[len] = 0; len++; ans++; continue; } last[min(len - 1, 17)]++; for(int j = min(len - 1, 17); j >= V.size() + 1; j--) { if(last[j] == 10) { last[j - 1]++; last[j] = 0; } } if(last[V.size()] == 10) { len++; for(int j = V.size(); j < len; j++) last[j] = 0; } ans += len - V.size(); } } cout << ans << "\n"; return 0; } |