#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n, i, count, a, b, z;
long result = 0;
bool samo = false;
unsigned long long l, tmp, lastl = 0;
stack < int > akt;
stack < int > last;
cin >> n;
count = 0;
z = 0;
for(i = 0; i < n; ++i){
count = 0;
if(lastl > 100000000000000000){
lastl/=1000000;
z+=6;
}
cin >> l;
if(l > lastl) {
lastl = l;
result += z;
continue;
}
if(l == lastl){
if(z == 0){
lastl = l*10;
count++;
}
result+=(count+z);
continue;
}
tmp = lastl;
while(tmp > 0){
last.push(tmp % 10);
tmp = tmp / 10;
}
tmp = l;
while(tmp > 0){
akt.push(tmp % 10);
tmp = tmp / 10;
}
samo = false;
while(!last.empty()){
if(akt.empty()){
while(!last.empty()){
tmp = last.top();
last.pop();
samo = samo || (tmp!=9);
count++;
}
if(!samo){
count++;
}
if(z == 0) lastl=lastl+1;
result+=(count+z);
} else {
a = last.top();
b = akt.top();
last.pop();
akt.pop();
if(a < b){
while(!last.empty()){
if(akt.empty()){
count++;
l*=10;
} else {
akt.pop();
}
last.pop();
}
lastl = l;
result+=(count+z);
} else if (a > b) {
while(!last.empty()){
if(akt.empty()){
count++;
l*=10;
} else {
akt.pop();
}
last.pop();
}
lastl=l*10;
count++;
result+=count+z;
}
}
}
}
cout << result;
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 | #include <iostream> #include <stack> using namespace std; int main() { int n, i, count, a, b, z; long result = 0; bool samo = false; unsigned long long l, tmp, lastl = 0; stack < int > akt; stack < int > last; cin >> n; count = 0; z = 0; for(i = 0; i < n; ++i){ count = 0; if(lastl > 100000000000000000){ lastl/=1000000; z+=6; } cin >> l; if(l > lastl) { lastl = l; result += z; continue; } if(l == lastl){ if(z == 0){ lastl = l*10; count++; } result+=(count+z); continue; } tmp = lastl; while(tmp > 0){ last.push(tmp % 10); tmp = tmp / 10; } tmp = l; while(tmp > 0){ akt.push(tmp % 10); tmp = tmp / 10; } samo = false; while(!last.empty()){ if(akt.empty()){ while(!last.empty()){ tmp = last.top(); last.pop(); samo = samo || (tmp!=9); count++; } if(!samo){ count++; } if(z == 0) lastl=lastl+1; result+=(count+z); } else { a = last.top(); b = akt.top(); last.pop(); akt.pop(); if(a < b){ while(!last.empty()){ if(akt.empty()){ count++; l*=10; } else { akt.pop(); } last.pop(); } lastl = l; result+=(count+z); } else if (a > b) { while(!last.empty()){ if(akt.empty()){ count++; l*=10; } else { akt.pop(); } last.pop(); } lastl=l*10; count++; result+=count+z; } } } } cout << result; return 0; } |
English