Run ID:138669

提交时间:2025-11-29 13:46:02

#include <iostream> #include <vector> #include <algorithm> using namespace std; int dfs(int pos, int pre_is_six, int limit, vector<int>& digits, vector<vector<vector<int>>>& dp) { int len = digits.size(); if (pos == len) return 1; if (dp[pos][pre_is_six][limit] != -1) return dp[pos][pre_is_six][limit]; int ans = 0; int up = limit ? digits[pos] : 9; for (int d = 0; d <= up; d++) { if (d == 4) continue; if (pre_is_six && d == 2) continue; int next_pre = (d == 6) ? 1 : 0; int next_limit = (limit && d == up) ? 1 : 0; ans += dfs(pos + 1, next_pre, next_limit, digits, dp); } dp[pos][pre_is_six][limit] = ans; return ans; } int solve(int x) { if (x < 0) return 0; if (x == 0) return 1; vector<int> digits; int t = x; while (t) { digits.push_back(t % 10); t /= 10; } reverse(digits.begin(), digits.end()); int len = digits.size(); vector<vector<vector<int>>> dp(len, vector<vector<int>>(2, vector<int>(2, -1))); return dfs(0, 0, 1, digits, dp); } int main() { int n, m; while (cin >> n >> m) { if (n > m) { cout << 0 << endl; } else { int ans = solve(m) - solve(n - 1); cout << ans << endl; } } return 0; }