//#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int n; long long l1, l2, d1, d2, p1, p2, w, dpz, z1, lr, p10[16], r, wyn, uw; int main() { scanf("%d", &n); l1 = -1; p1 = 0; d1 = 0; p10[0] = 1; for (int i = 1; i < 16; i++)p10[i] = 10 * p10[i - 1]; scanf("%lld", &l1); d1 = 0; p1 = l1; for (; p1 > 0; d1++) { p1 /= 10; } for (int i = 1; i < n; i++) { l2 = l1; d2 = d1; if (d2 < 16 && l2 == p10[d2] - 1)uw = 1; l2++; scanf("%lld", &l1); //printf("%lld %lld ", l2, d2); d1 = 0; p1 = l1; for (; p1 > 0;) { p1 /= 10; d1++; } if (uw == 1) { d2++; wyn += d2 - d1; l1 *= p10[d2 - d1]; d1 = d2; uw = 0; continue; } if (d1 > d2 || (d1 == d2 && l1 >= l2)) { continue; } if (d2 > 16) { p1 = l1; p1 *= p10[16 - d1]; r = p10[16 - d1] - 1; wyn += 16 - d1; d1 = 16; } else { p1 = l1; p1 *= p10[d2 - d1]; r = p10[d2 - d1] - 1; wyn += d2 - d1; d1 = d2; } //printf("%lld %lld\n", p1,l2); if (p1 <= l2 && p1 + r >= l2) { l1 = l2; wyn += d2 - d1; d1 = d2; continue; } if (p1 > l2) { l1 = p1; wyn += d2 - d1; d1 = d2; continue; } if (d2 < 16) { l1 = 10 * p1; wyn++; d1++; continue; } if (d2 >= 16) { l1 = p1; wyn += d2 - d1 + 1; d1 += d2 - d1+1; continue; } } printf("%lld\n", wyn); //system("PAUSE"); }
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 | //#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int n; long long l1, l2, d1, d2, p1, p2, w, dpz, z1, lr, p10[16], r, wyn, uw; int main() { scanf("%d", &n); l1 = -1; p1 = 0; d1 = 0; p10[0] = 1; for (int i = 1; i < 16; i++)p10[i] = 10 * p10[i - 1]; scanf("%lld", &l1); d1 = 0; p1 = l1; for (; p1 > 0; d1++) { p1 /= 10; } for (int i = 1; i < n; i++) { l2 = l1; d2 = d1; if (d2 < 16 && l2 == p10[d2] - 1)uw = 1; l2++; scanf("%lld", &l1); //printf("%lld %lld ", l2, d2); d1 = 0; p1 = l1; for (; p1 > 0;) { p1 /= 10; d1++; } if (uw == 1) { d2++; wyn += d2 - d1; l1 *= p10[d2 - d1]; d1 = d2; uw = 0; continue; } if (d1 > d2 || (d1 == d2 && l1 >= l2)) { continue; } if (d2 > 16) { p1 = l1; p1 *= p10[16 - d1]; r = p10[16 - d1] - 1; wyn += 16 - d1; d1 = 16; } else { p1 = l1; p1 *= p10[d2 - d1]; r = p10[d2 - d1] - 1; wyn += d2 - d1; d1 = d2; } //printf("%lld %lld\n", p1,l2); if (p1 <= l2 && p1 + r >= l2) { l1 = l2; wyn += d2 - d1; d1 = d2; continue; } if (p1 > l2) { l1 = p1; wyn += d2 - d1; d1 = d2; continue; } if (d2 < 16) { l1 = 10 * p1; wyn++; d1++; continue; } if (d2 >= 16) { l1 = p1; wyn += d2 - d1 + 1; d1 += d2 - d1+1; continue; } } printf("%lld\n", wyn); //system("PAUSE"); } |