Description
给出一正整数
n
,求满足以下三个条件的
1.
x
相当于是
2. x 无前导零
3.
Input
两个整数
Output
输出满足条件的 x 个数
Sample Input
104 2
Sample Output
3
Solution
假设
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=(1<<18)+5;
ll n,dp[maxn][105];
int m,num[maxn],sum[maxn];
int main()
{
while(~scanf("%I64d%d",&n,&m))
{
memset(num,0,sizeof(num));
int N=0;
while(n)N++,num[n%10]++,n/=10;
sum[0]=0;
for(int i=1;i<=10;i++)sum[i]=sum[i-1]+num[i-1];
memset(dp,0,sizeof(dp));
for(int i=1;i<10;i++)
if(num[i])dp[1<<sum[i]][i%m]=1;
N=1<<N;
for(int i=0;i<N;i++)
for(int j=0;j<m;j++)
if(dp[i][j])
for(int k=0;k<=9;k++)
for(int l=sum[k];l<sum[k+1];l++)
{
if(i&(1<<l))continue;
dp[i^(1<<l)][(10*j+k)%m]+=dp[i][j];
break;
}
printf("%I64d\n",dp[N-1][0]);
}
return 0;
}