题目链接:
题意:给出一个B进制的数字x,将x的各位数字(设x包含数字为t)进行全排列得到t!个数字,在这t!数字中,有多少个数字能整数给定的数字K?
思路:f[st][r]表示使用的数字集合为st,余数为r的个数。首先统计出含有i个1的二进制状态,然后对于含有x个1的状态添加一个1得到含有x+1个1的状态。
#include#include #include #define int64 long longusing namespace std;int C,B,K,a[20],n,num=0;char s[20];int64 f[(1<<16)+5][25];int p[(1<<16)+5],q[17][(1<<16)+5],cnt[17];void init(){ int i,j; for(i=0;i<(1<<16);i++) { p[i]=0; for(j=0;j<16;j++) if(i&(1< ='0'&&s[i]<='9') a[i]=s[i]-'0'; else a[i]=s[i]-'A'+10; } memset(cnt,0,sizeof(cnt)); for(i=0;i<(1<