• BZOJ 1072: [SCOI2007]排列perm


    1072: [SCOI2007]排列perm

    Time Limit: 10 Sec  Memory Limit: 128 MB

    Submit: 2599  Solved: 1624

    [Submit][Status][Discuss]

    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

    题解

    因为s长度很小,所以可以状压枚举子集。

    设f[i][j]为当前选的数的集合为i,除以d余j的排列的个数。

    假设在最后一位加入第k个数,那么余数变为(j*10+s[k])%d,转移方程为:f[i|(1<<(k-1))][(j*10+s[k])%d]+=f[i][j]。

    代码

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int N=15,D=1005;
    int t,d,ans;
    int f[1<<N][D],cnt[N],fac[N];
    char s[N];
    int main(){
    	fac[1]=1;
    	for(int i=2;i<=10;i++){
    		fac[i]=fac[i-1]*i;
    	}
    	scanf("%d",&t);
    	int len;
    	while(t--){
    		memset(f,0,sizeof(f));
    		scanf("%s%d",s+1,&d);
    		len=strlen(s+1);
    		f[0][0]=1;
    		for(int i=0;i<(1<<len);i++){
    			for(int j=1;j<=len;j++){
    				if((i&(1<<(j-1)))==0){
    					for(int k=0;k<d;k++){
    						f[i|(1<<(j-1))][(k*10+s[j]-'0')%d]+=f[i][k];
    					}
    				}
    			}
    		}
    		ans=f[(1<<len)-1][0];
    		for(int i=1;i<=len;i++){
    			cnt[s[i]-'0']++;
    		}
    		for(int i=0;i<=9;i++){
    			if(cnt[i])ans/=fac[cnt[i]];
    			cnt[i]=0;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
  • 相关阅读:
    Flink Table环境配置、读取外部数据(File、Kafka)以及查询转换
    Flink之Table初探
    Flink之Watermarks
    Flink之ProcessFunction侧输出流
    Flink之ProcessFunction案例
    Flink之Mysql数据CDC
    Express ejs 模板做的 app.js 文件
    金额转换文章(100=>零佰)
    将 音频流(MP3流)并进行播放
    浅谈MySQL(一):存储引擎与索引
  • 原文地址:https://www.cnblogs.com/chezhongyang/p/7763415.html
Copyright © 2020-2023  润新知