#include <bits/stdc++.h> using namespace std; static unsigned int for_num (unsigned int x) { return min (x + 1, 19 - x); } unsigned long long dp[19]; int main (void) { char buf[32]; fill (buf, buf + 32, 0); scanf ("%s", buf); unsigned int n = strlen (buf); reverse (buf, buf + n); dp[0] = 1; for (unsigned int i = 1; i <= n; i ++) { dp[i] = dp[i - 1] * for_num (buf[i - 1] - '0'); if (i > 1 && buf[i - 1] == '1' && buf[i - 2] < '9') dp[i] += dp[i - 2] * for_num (10 * (buf[i - 1] - '0') + (buf[i - 2] - '0')); } printf ("%llu\n", dp[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 | #include <bits/stdc++.h> using namespace std; static unsigned int for_num (unsigned int x) { return min (x + 1, 19 - x); } unsigned long long dp[19]; int main (void) { char buf[32]; fill (buf, buf + 32, 0); scanf ("%s", buf); unsigned int n = strlen (buf); reverse (buf, buf + n); dp[0] = 1; for (unsigned int i = 1; i <= n; i ++) { dp[i] = dp[i - 1] * for_num (buf[i - 1] - '0'); if (i > 1 && buf[i - 1] == '1' && buf[i - 2] < '9') dp[i] += dp[i - 2] * for_num (10 * (buf[i - 1] - '0') + (buf[i - 2] - '0')); } printf ("%llu\n", dp[n]); return 0; } |