#include <iostream>
#include <string>
#include <valarray>
using namespace std;
void getNumberOfAddedDigits(long long a[], int n) {
long long digits = 0;
long long next = 0;
long long prev = 0;
for (int i = 0; i < n-1; i++)
{
long long temp = a[i+1];
if (a[i+1] <= a[i]) {
string s1 = to_string(a[i]);
string s2 = to_string(a[i+1]);
int size1 = s1.size();
int size2 = s2.size();
if (size2 == size1)
{
string addedStr = to_string(next);
s2 += addedStr;
a[i+1] = stoll(s2);
next++;
digits += addedStr.size();
}
else
{
string addedStr;
if (prev > a[i+1]) {
addedStr = string(to_string(prev).size() - size2, '0') + "0";
s2 += addedStr;
}
else
{
int diff = size1 - size2;
addedStr = to_string(stoll(s1.substr(size2 - diff + 1, diff))+1);
s2 += string(diff - addedStr.size(), '0') + addedStr;
}
a[i+1] = stoll(s2);
next = 0;
digits += addedStr.size();
}
}
prev = temp;
}
// TODO: remove
// for (int i = 0; i < n; i++) {
// cout << a[i] << " ";
// }
// cout << endl; // TODO: remove!
cout << digits;
}
long long arr[200000];
int main(int argc, char**argv) {
int n = 1;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
getNumberOfAddedDigits(arr, 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 | #include <iostream> #include <string> #include <valarray> using namespace std; void getNumberOfAddedDigits(long long a[], int n) { long long digits = 0; long long next = 0; long long prev = 0; for (int i = 0; i < n-1; i++) { long long temp = a[i+1]; if (a[i+1] <= a[i]) { string s1 = to_string(a[i]); string s2 = to_string(a[i+1]); int size1 = s1.size(); int size2 = s2.size(); if (size2 == size1) { string addedStr = to_string(next); s2 += addedStr; a[i+1] = stoll(s2); next++; digits += addedStr.size(); } else { string addedStr; if (prev > a[i+1]) { addedStr = string(to_string(prev).size() - size2, '0') + "0"; s2 += addedStr; } else { int diff = size1 - size2; addedStr = to_string(stoll(s1.substr(size2 - diff + 1, diff))+1); s2 += string(diff - addedStr.size(), '0') + addedStr; } a[i+1] = stoll(s2); next = 0; digits += addedStr.size(); } } prev = temp; } // TODO: remove // for (int i = 0; i < n; i++) { // cout << a[i] << " "; // } // cout << endl; // TODO: remove! cout << digits; } long long arr[200000]; int main(int argc, char**argv) { int n = 1; cin >> n; for (int i = 0; i < n; i++) { cin >> arr[i]; } getNumberOfAddedDigits(arr, n); return 0; } |
English