From 07fdae11edd5992d17db6e79646acc6b535ba81e Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:56:18 +0800 Subject: [PATCH] new file: P13085.cpp --- P13085.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 P13085.cpp diff --git a/P13085.cpp b/P13085.cpp new file mode 100644 index 0000000..48db7db --- /dev/null +++ b/P13085.cpp @@ -0,0 +1,89 @@ +#include +#define int long long +using namespace std; +int a, b; +int dp[35][35]; +int getlen(int num) +{ + if (num < 10) + return 1; + int cnt = 0; + while (num) + { + num /= 10; + cnt++; + } + return cnt; +} +int calc(int x) +{ + if (x <= 0) + return 0; + vector digit; + while (x) + { + digit.push_back(x % 10); + x /= 10; + } + int len = digit.size(); + int res = 0; + for (int i = 1; i < len; ++i) + { + for (int j = 1; j <= 9; ++j) + { + res += dp[i][j]; + } + } + for (int i = len - 1; i >= 0; --i) + { + int cur = digit[i]; + int start = (i == len - 1) ? 1 : 0; + for (int j = start; j < cur; ++j) + { + if (i == len - 1 || abs(j - digit[i + 1]) >= 2) + { + if (i == 0) + { + ++res; + } + else + { + res += dp[i + 1][j]; + } + } + } + if (i != len - 1 && abs(cur - digit[i + 1]) < 2) + { + break; + } + if (i == 0) + { + ++res; + } + } + return res; +} + +signed main() +{ + scanf("%lld%lld", &a, &b); + int _b = getlen(b); + for (int i = 0; i <= 9; ++i) + { + dp[1][i] = 1; + } + for (int i = 2; i <= _b; ++i) + { + for (int j = 0; j <= 9; ++j) + { + for (int k = 0; k <= 9; ++k) + { + if (abs(j - k) < 2) + continue; + dp[i][j] += dp[i - 1][k]; + } + } + } + printf("%lld\n", calc(b) - calc(a - 1)); + return 0; +} \ No newline at end of file