AcWing 1085. 不要62
原题链接
中等
作者:
总有刁民想害朕
,
2020-04-21 16:00:17
,
所有人可见
,
阅读 642
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 40;
int arr[N];
int dp[N][N];
int dfs(int pos, int pre, int limit){
if(!pos) return 1;
if(!limit && dp[pos][pre] != -1) return dp[pos][pre];
int up = limit ? arr[pos] : 9;
int ans = 0;
for(int i = 0;i <= up;++i)
if(i == 4 || (pre == 6 && i == 2)) continue;
else
ans += dfs(pos-1, i, limit && (i == up));
if(!limit) dp[pos][pre] = ans;
return ans;
}
int solve(int x){
int cnt = 0;
while(x) arr[++cnt] = x % 10, x /= 10;
memset(dp, -1, sizeof dp);
return dfs(cnt, -1, 1);
}
int main(){
int l, r;
while(cin >> l >> r, l || r){
cout << solve(r) - solve(l-1) << endl;
}
}