【SCOI2007】【BZOJ1072】排列perm
2016-01-30 16:58
417 查看
Description
给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种。
Input
输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Output
每个数据仅一行,表示能被d整除的排列的个数。
Sample Input
7
000 1
001 1
1234567890 1
123434 2
1234 7
12345 17
12345678 29
Sample Output
1
3
3628800
90
3
6
1398
HINT
在前三个例子中,排列分别有1, 3, 3628800种,它们都是1的倍数。
【限制】
100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15
直接暴力是len!*len*T的会T(不过后来查了查用Set可以把一个Len变成log..好厉害的暴力T_T
所以还是老老实实写状压
f[i][j],i的二进制上的1表示选原串对应位置上的数然后模d为j 这样的方案数
然后随便DP一下
给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种。
Input
输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Output
每个数据仅一行,表示能被d整除的排列的个数。
Sample Input
7
000 1
001 1
1234567890 1
123434 2
1234 7
12345 17
12345678 29
Sample Output
1
3
3628800
90
3
6
1398
HINT
在前三个例子中,排列分别有1, 3, 3628800种,它们都是1的倍数。
【限制】
100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15
直接暴力是len!*len*T的会T(不过后来查了查用Set可以把一个Len变成log..好厉害的暴力T_T
所以还是老老实实写状压
f[i][j],i的二进制上的1表示选原串对应位置上的数然后模d为j 这样的方案数
然后随便DP一下
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define GET (ch>='0'&&ch<='9') #define MAXN 1024 using namespace std; int T,n,d; char ch[20]; int cnt[20],fac[12]={1}; int f[2100][1010]; void in(int &x) { char ch=getchar();x=0; while (!GET) ch=getchar(); while (GET) x=x*10+ch-'0',ch=getchar(); } int main() { for (int i=1;i<12;i++) fac[i]=fac[i-1]*i; for (in(T);T;T--) { scanf("%s",ch);in(d);n=strlen(ch); memset(cnt,0,sizeof(cnt));memset(f,0,sizeof(f));f[0][0]=1; for (int i=0;i<n;i++) cnt[ch[i]-'0']++; for (int i=0;i<(1<<n);i++) for (int j=0;j<=d;j++) if (f[i][j]) for (int k=0;k<n;k++) if (!(i&(1<<k))) f[i|(1<<k)][(j*10+ch[k]-'0')%d]+=f[i][j]; for (int i=0;i<10;i++) f[(1<<n)-1][0]/=fac[cnt[i]]; printf("%d\n",f[(1<<n)-1][0]); } }
相关文章推荐
- POJ 3254 - Corn Fields [状压DP]
- poj 2836
- poj 3254
- POJ 2441
- 2014 西安邀请赛状压DP
- Mega Man’s Missions
- 【2015新手赛网络赛】 1004 Good Subsets
- HDU 5561 【2015合肥现场赛】 Kingdom of Tree
- HDU 5135 Little Zu Chongzhi's Triangles (2014年广州赛区现场赛I题)
- 【PA2014】【BZOJ3717】Pakowanie
- Codevs2880 送外卖
- codeforces #302 Remembering Strings (dp)
- hdu 5418 Victor and World 状压DP
- Codeforces Round #235 (Div. 2) D. Roman and Numbers(状压dp)
- Codeforces Round #302 (Div. 2) E. Remembering Strings(状压dp)
- POJ 3254 Corn Fields (状压DP)
- poj(3254)——Corn Fields
- SDUT 3061 聪明的玛雅 (状压DP)
- POJ 3254 Corn Fields (状压DP+滚动数组)
- POJ 1185 炮兵阵地 (状压DP)