AcWing 1084. 数字游戏 II
原题链接
中等
作者:
总有刁民想害朕
,
2020-04-21 14:47:11
,
所有人可见
,
阅读 612
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 120;
int dp[N][N];
int arr[N];
int mod;
int dfs(int pos, long long sum, int limit){
if(!pos) return (sum % mod) == 0;
if(!limit && dp[pos][sum] != -1) return dp[pos][sum];
int up = limit ? arr[pos] : 9;
int ans = 0;
for(int i = 0;i <= up;++i)
ans += dfs(pos-1, sum + i, limit && (i == up));
if(!limit) dp[pos][sum] = 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, 0, 1);
}
int main(){
int l, r;
while(cin >> l >> r >> mod) cout << solve(r) - solve(l - 1) << endl;
return 0;
}