题目传送门
题目大意:
题面说的很简洁了。
思考过程&具体做法:
排列总数为
15∗10!=54432000<1∗108
15
∗
10
!
=
54432000
<
1
∗
10
8
,爆搜即可,剪枝都不需要。
代码:
#include <bits/stdc++.h>
using namespace std;
long long n,d,ans,T;
long long book[10];
char s[20];
void dfs(long long now,long sum)
{
if(now>=n)
{
if(sum%d==0) ans++;
return;
}
for(long long i=0;i<=9;i++)
{
if(book[i])
{
book[i]--;
dfs(now+1,sum*10+i);
book[i]++;
}
}
}
int main()
{
scanf("%lld",&T);
while(T--)
{
memset(book,0,sizeof(book));
scanf("%s",s);
scanf("%lld",&d);
n=strlen(s);
for(long long i=0;i<n;i++) book[s[i]-'0']++;
ans=0;
dfs(0,0);
printf("%lld\n",ans);
}
return 0;
}