思路大概就是用总数减去含 A1A2⋯An 的数,但是 lz 暴力总是推不对?
#include<bits/stdc++.h>
using namespace std;
int n,m,K,dp[1000005][25];
string s;
inline int qpow(int x,int y){
if(!y)
return 1;
int k=qpow(x,y>>1);
if(y&1)
return k*k%K*x%K;
return k*k%K;
}
signed main(){
cin>>n>>m>>K>>s;
dp[0][0]=1;
for(int i=1;i<=n;++i)
for(int j=0;j<=m;++j)
if(j==m)
dp[i][j]=(dp[i-1][j]*10%K+dp[i-1][j-1])%K;
else if(j)
dp[i][j]=dp[i-1][j-1];
else{
for(int k=0;k<=m;++k)
dp[i][j]=(dp[i][j]+dp[i-1][k]*9%K)%K;
}
cout<<(qpow(10,n)-dp[n][m]+K)%K<<endl;
return 0;
}