**题意:对于两个数i和k,把它分为两个部分的数,n和m,如果(n+m)%k=0 那么这算一种分法
比如 333可分成,3、33或者33、3,对于 (333,3)就等于2.
现在给出 a、b、k,为 (a~b,k)有多少种分法**
思路:对于一个数,注意前导零并枚举分点就好了。
LL A,B;
int K;
int bit[22];
LL dp[22][22][22][22][2],mul[22];
LL dfs(int i,int cut,int rest,int e,int f){
if(i==0)return rest?0:1;
if(!e&&dp[i][cut][rest][K][f]!=-1)return dp[i][cut][rest][K][f];
LL ret=0;
int up=e?bit[i]:9;
for(int j=0;j<=up;++j){
if(i>cut){
if(f==0&&i==cut+1&&j==0)continue;
ret+=dfs(i-1,cut,(j*mul[i-cut]+rest)%K,e&&j==up,f||j!=0);
}
else ret+=dfs(i-1,cut,(j*mul[i]+rest)%K,e&&j==up,f||j!=0);
}
if(!e)dp[i][cut][rest][K][f]=ret;
return ret;
}
LL solve(LL x){
int len=0;
if(x<0)return 0;
while(x){
bit[++len]=x%10;
x/=10;
}
LL ans=0;
for(int i=1;i<len;++i){
ans+=dfs(len,i,0,1,0);
}
return ans;
}
int main(){
mem(dp,-1);
mul[1]=1;
for(int i=2;i<19;++i)mul[i]=mul[i-1]*10;
while(~sf("%lld%lld%d",&A,&B,&K)){
pf("%lld\n",solve(B)-solve(A-1));
}
}u