记录编号 |
407004 |
评测结果 |
AAAAA |
题目名称 |
[SCOI 2007]排列 |
最终得分 |
100 |
用户昵称 |
Hallmeow |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.213 s |
提交时间 |
2017-05-20 10:45:18 |
内存使用 |
9.56 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define N 1100
#define LL long long
int t;
LL ans;
LL shu[N];
char a[N];
int d,ji[N],len;
LL f[N][N];
int A[]={0,1,2,6,24,120,720,5040,40320,362880,3628800};
int read()
{
int su=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch<='9'&&ch>='0')
{
su=su*10+ch-'0';
ch=getchar();
}
return su;
}
void init()
{
memset(ji,0,sizeof(ji));
memset(f,0,sizeof(f));
//memset(shu,0,sizeof(shu));
ans=0;
scanf("%s%d",&a,&d);
//d=read();
len=strlen(a);
pos(i,0,len-1)
{
shu[i]=a[i]-'0';
ji[shu[i]]++;
}
}
void zhao()
{
f[0][0]=1;
pos(i,0,(1<<len)-1)
pos(j,0,d-1)
if(f[i][j])
pos(k,0,len-1)
{
if((i&(1<<k))==0)
f[i|(1<<k)][(j*10+shu[k])%d]+=f[i][j];
}
ans=f[(1<<len)-1][0];
//cout<<ans<<endl;
pos(i,0,9)
if(ji[i])
ans/=A[ji[i]];
printf("%lld\n",ans);
}
int main()
{
freopen("wulipailie.in","r",stdin);
freopen("wulipailie.out","w",stdout);
scanf("%d",&t);
while(t--)
{
init();
zhao();
}
//while(1);
return 0;
}