记录编号 407004 评测结果 AAAAA
题目名称 [SCOI 2007]排列 最终得分 100
用户昵称 GravatarHallmeow 是否通过 通过
代码语言 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;
}