#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
long long n, a, res = 0;
long long digitsNum, suff, prevNum;
long long numOfDigits(long long a) {
long long res = 0;
if (a == 0) {
return 1;
}
while(a > 0) {
res++;
a /= 10;
}
return res;
}
bool pref(long long small, long long big) {
while(big > small) {
big /= 10;
}
return (big == small);
}
bool smallerPref(long long a, long long b) {
vector<int>va;
vector<int>vb;
// cout << "(" << a << " smaller than " << b << ")";
while(a > 0) {
va.push_back(a % 10);
a /= 10;
}
while(b > 0) {
vb.push_back(b % 10);
b /= 10;
}
while (!va.empty() && !vb.empty()) {
if (va.back() < vb.back()) {
return true;
}
if (va.back() > vb.back()) {
return false;
}
va.pop_back();
vb.pop_back();
}
return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin >> n;
bool small = true;
for (int i = 0; i < n; i++) {
long long prev_res = res;
cin >> a;
// cout << a << " ";
// cout << "prevNum " << prevNum << " ";
if (digitsNum < 13) {
long long digits = numOfDigits(a);
long long old_a = a;
if (prevNum == a) {
res++;
digitsNum++;
a *= 10;
}
else
if (prevNum >= a) {
if (pref(a, prevNum + 1)) {
a = prevNum + 1;
res += digitsNum - digits;
}
else {
while(prevNum >= a) {
a *= 10;
res++;
}
}
}
prevNum = a;
digitsNum = numOfDigits(a);
if (digitsNum == 13) {
prevNum = old_a;
}
}
else {
if (smallerPref(a, prevNum)) {
digitsNum++;
}
res += digitsNum - numOfDigits(a);
prevNum = a;
}
// cout << "num " << a << " " << res - prev_res << " digitsNum " << digitsNum << endl;
}
cout << res << endl;
}
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 | #include <cstdio> #include <iostream> #include <vector> using namespace std; long long n, a, res = 0; long long digitsNum, suff, prevNum; long long numOfDigits(long long a) { long long res = 0; if (a == 0) { return 1; } while(a > 0) { res++; a /= 10; } return res; } bool pref(long long small, long long big) { while(big > small) { big /= 10; } return (big == small); } bool smallerPref(long long a, long long b) { vector<int>va; vector<int>vb; // cout << "(" << a << " smaller than " << b << ")"; while(a > 0) { va.push_back(a % 10); a /= 10; } while(b > 0) { vb.push_back(b % 10); b /= 10; } while (!va.empty() && !vb.empty()) { if (va.back() < vb.back()) { return true; } if (va.back() > vb.back()) { return false; } va.pop_back(); vb.pop_back(); } return false; } int main() { ios_base::sync_with_stdio(0); cin >> n; bool small = true; for (int i = 0; i < n; i++) { long long prev_res = res; cin >> a; // cout << a << " "; // cout << "prevNum " << prevNum << " "; if (digitsNum < 13) { long long digits = numOfDigits(a); long long old_a = a; if (prevNum == a) { res++; digitsNum++; a *= 10; } else if (prevNum >= a) { if (pref(a, prevNum + 1)) { a = prevNum + 1; res += digitsNum - digits; } else { while(prevNum >= a) { a *= 10; res++; } } } prevNum = a; digitsNum = numOfDigits(a); if (digitsNum == 13) { prevNum = old_a; } } else { if (smallerPref(a, prevNum)) { digitsNum++; } res += digitsNum - numOfDigits(a); prevNum = a; } // cout << "num " << a << " " << res - prev_res << " digitsNum " << digitsNum << endl; } cout << res << endl; } |
English