```cpp
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std;
const int mod = 999911659;
LL n;
int p;
int f[20][15][2][501];
int s[100];
LL qsm(LL x,LL y)
{
LL base = x;
LL sum = 1;
while(y) {
if(y & 1) sum = sum * base;
base = base * base;
y >>= 1;
}
return sum;
}
LL dfs(int id,int last,int limit,int k)
{
if(!id) return !k ? 1 : 0;
if(~f[id][last][limit][k] && !limit) return (f[id][last][limit][k] + mod ) % mod;
int up = limit ? s[id] : 9;
LL ans = 0;
for(int i = 1;i <= up;i ++) {
if(i < last) continue;
int h = (k * 10 + i) % p;
ans += (dfs(id - 1,i,limit && (i == up),h) + mod) % mod;
}
if(!limit) f[id][last][limit][k] = (ans + mod) % mod;
return ans;
}
LL work(LL d)
{
int cnt = 0;
memset(f, -1, sizeof f);
for(;d;d /= 10) s[++ cnt] = d % 10;
return dfs(cnt,0,1,0) % mod;
}
int main()
{
// freopen("4041.in","r",stdin);
// freopen("4041.ans","w",stdout);
cin >> n >> p;
LL m = qsm(10,n);
//cout << m << endl;
LL ans = work(m - 1);
cout << (ans + mod) % mod << endl;
return 0;
}
```
by 斜揽残箫 @ 2021-02-06 18:58:04
@[斜揽残箫](/user/381904)
不一定您输出是0啊
就好比正确答案是`114514`
结果你输出的是`114510`
那评测姬就会返回`read 0, expected 4`
by int64 @ 2021-02-06 19:06:37
如果你能写点能看懂的..我兴许还能看出来
by Durancer @ 2021-02-06 19:06:53
@[斜揽残箫](/user/381904)
```cpp
100 5
YOUR ANS:0
AC ANS:4421275
```
by 天南星魔芋 @ 2021-02-06 19:07:25
@[_钻剑君_](/user/360331) 评测姬返回的事 `On line 1 column 1, read 0, expected XXX` 啊
by CGDGAD @ 2021-02-06 19:09:24
@[天南星魔芋](/user/399239)
奥,原来是我看错数据范围了,我把 n 看成了 18 。。。
by 斜揽残箫 @ 2021-02-06 19:10:27
此贴完结。。。
by 斜揽残箫 @ 2021-02-06 19:11:06
谢谢各位
by 斜揽残箫 @ 2021-02-06 19:11:51
@[NSObject](/user/357545) 啊,眼瞎(
by int64 @ 2021-02-06 19:13:26
@[斜揽残箫](/user/381904) 和我第一次一样,以为就是个水dp,结果。。。
by abruce @ 2021-02-06 19:42:02