code:

#include <bits/stdc++.h>
#define N 1005
using namespace std;
void setIO(string s)
{
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"W",stdout);
}
char str[N];
int num[N],f[N<<1][N],poww[N],tax[11],fac[N],vis[11];
void solve()
{
memset(f,0,sizeof(f));
memset(tax,0,sizeof(tax));
memset(vis,0,sizeof(vis));
int mod,i,j,n,k;
scanf("%s%d",str,&mod);
n=strlen(str);
fac[0]=poww[0]=1;
for(i=1;i<=10;++i) fac[i]=fac[i-1]*i;
for(i=1;i<=n;++i) poww[i]=poww[i-1]*10%mod;
for(i=0;i<n;++i) num[i]=str[i]-'0', ++tax[num[i]];
f[0][0]=1;
for(i=0;i<(1<<n);++i)
{
for(j=0;j<mod;++j)
{
int sz=0;
for(k=0;k<n;++k) if(i&(1<<k)) ++sz;
for(k=0;k<n;++k)
{
if(i&(1<<k)) continue;
else
{
int nx=i|(1<<k);
int cur=num[k];
f[nx][(j+cur*poww[sz]%mod)%mod]+=f[i][j];
}
}
}
}
int ans=f[(1<<n)-1][0];
for(i=0;i<n;++i) if(!vis[num[i]]) vis[num[i]]=1, ans/=fac[tax[num[i]]];
printf("%d\n",ans);
}
int main()
{
// setIO("input");
int T;
scanf("%d",&T);
while(T--)
{
solve();
}
return 0;
}

  

最新文章

  1. listview侧滑删除
  2. sublime text 2 快捷键
  3. Vijos1881闪烁的繁星 [线段树]
  4. Eclipse启动时布局不合理调整
  5. Java多线程基础知识(二)
  6. error MSB6006: &ldquo;cmd.exe&rdquo;已退出,代码为 3。
  7. CE搜索内存数据的原理
  8. poj1308 并查集
  9. bat file handling, main: echo type *.txt &gt;&gt; /&gt;
  10. Ubuntu 环境变量及 ADB 配置
  11. 在centos使用rpm包的方式安装mysql,以及更改root密码
  12. Python实现kNN(k邻近算法)
  13. cellspacing cellpadding
  14. install font
  15. 【推荐】开源项目minapp-重新定义微信小程序的开发
  16. windowsXP下搭建JAVA环境教程
  17. JavaScript(第十九天)【DOM进阶】
  18. 扫描工具nmap介绍
  19. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
  20. 团队作业——UML设计

热门文章

  1. Android--创建快捷方式
  2. TypeScript之泛型
  3. Jupyter Notebook的配置(密码端口+远程登陆+nbextension)
  4. Java 二叉搜索树 实现和学习
  5. JML规格编程系列——OO Unit3分析和总结
  6. Synchronized 和 Lock 的主要区别(转)
  7. Node笔记(新手入门必看)
  8. Jest did not exit one second after the test run has completed.
  9. 设置 SQL*Plus 的运行环境
  10. JavaScript 继承 封装 多态实现及原理详解