#include <iostream> #include <math.h> using namespace std; int main() { int64_t N; cin >> N; int64_t zerosBefore=0; int64_t prevNumber = 0; int64_t total = 0; for (int n = 0; n<N; n++) { int64_t a; cin >> a; int64_t digits = ceil(log10(a)); int64_t digitsBefore = ceil(log10(prevNumber)); int64_t prevTotalDigits = digitsBefore + zerosBefore; if (digits > prevTotalDigits) { prevNumber = a; zerosBefore = 0; continue; } else if (digits == prevTotalDigits) { int64_t prevTotalNumber = prevNumber * pow(10, zerosBefore); if (prevTotalNumber >= a) { total++; zerosBefore = 1; prevNumber = a; continue; } else { prevNumber = a; zerosBefore = 0; continue; } } else { if (prevNumber > a) { int64_t digitsDiff = digitsBefore - digits; int64_t number = a* pow(10, digitsDiff); if (number <= prevNumber) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { total += prevTotalDigits-digits; zerosBefore = prevTotalDigits-digits; prevNumber = a; continue; } } else if (prevNumber == a) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { int64_t digitsDiff = digits - digitsBefore; int64_t number = prevNumber * pow(10, digitsDiff); if (number >= a) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { total += prevTotalDigits-digits; zerosBefore = prevTotalDigits-digits; prevNumber = a; continue; } } } } cout << total << endl; 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 | #include <iostream> #include <math.h> using namespace std; int main() { int64_t N; cin >> N; int64_t zerosBefore=0; int64_t prevNumber = 0; int64_t total = 0; for (int n = 0; n<N; n++) { int64_t a; cin >> a; int64_t digits = ceil(log10(a)); int64_t digitsBefore = ceil(log10(prevNumber)); int64_t prevTotalDigits = digitsBefore + zerosBefore; if (digits > prevTotalDigits) { prevNumber = a; zerosBefore = 0; continue; } else if (digits == prevTotalDigits) { int64_t prevTotalNumber = prevNumber * pow(10, zerosBefore); if (prevTotalNumber >= a) { total++; zerosBefore = 1; prevNumber = a; continue; } else { prevNumber = a; zerosBefore = 0; continue; } } else { if (prevNumber > a) { int64_t digitsDiff = digitsBefore - digits; int64_t number = a* pow(10, digitsDiff); if (number <= prevNumber) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { total += prevTotalDigits-digits; zerosBefore = prevTotalDigits-digits; prevNumber = a; continue; } } else if (prevNumber == a) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { int64_t digitsDiff = digits - digitsBefore; int64_t number = prevNumber * pow(10, digitsDiff); if (number >= a) { total += prevTotalDigits-digits + 1; zerosBefore = prevTotalDigits-digits + 1; prevNumber = a; continue; } else { total += prevTotalDigits-digits; zerosBefore = prevTotalDigits-digits; prevNumber = a; continue; } } } } cout << total << endl; return 0; } |