神树大人挥动魔杖
Solution
递推。
记
枚举
很容易求出
则
对于每一个
需要注意的是,答案模数为
Codes
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5000 + 7;
const int MAXK = 1000 + 7;
const int mod = 100000007;
int n, k;
long long f[MAXN][MAXK];
long long sum[MAXK];
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= 9; i++) f[1][i % k]++, sum[i % k]++;
if(n == 1) {
for(int i = 0; i < k; i++) {
printf("%lld%c", f[n][i], " \n"[i == k - 1]);
}
return 0;
}
long long mul = 1;
for(int i = 2; i <= n; i++) {
mul = mul * 10 % k;
for(int j = 1; j <= 9; j++) {
long long val = j * mul % k;
for(int p = 0; p < k; p++) {
long long to = (p + val) % k;
f[i][to] = (f[i][to] + sum[p]) % mod;
}
f[i][val]++;
}
for(int j = 0; j < k; j++) sum[j] += f[i][j], sum[j] %= mod;
}
for(int i = 0; i < k; i++) {
printf("%lld%c", f[n][i], " \n"[i == k - 1]);
}
return 0;
}