zoukankan      html  css  js  c++  java
  • 【置换群】【枚举约数】hdu6038 Function

    把b数组的所有置换群求出来,用数组记录一下每个大小所出现的次数。

    然后求a的置换群,对每个置换群求能被其整除的b的置换群的大小总和(只有这些才能满足构造出一个f,且不自相矛盾),然后把它们全都乘起来就是答案。

    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    #define MOD 1000000007ll
    int n,m,a[100010],b[100010],zu;
    bool vis[100010];
    //ll Quick_Pow(ll a,ll p){
    //	if(!p){
    //		return 1;
    //	}
    //	ll res=Quick_Pow(a,p>>1);
    //	res=res*res%MOD;
    //	if(p&1ll){
    //		res=(a%MOD*res)%MOD;
    //	}
    //	return res;
    //}
    int nowsiz,cnts[100010];
    void dfs(int U){
    	vis[U]=1;
    	++nowsiz;
    	if(!vis[b[U]]){
    		dfs(b[U]);
    	}
    }
    void df2(int U){
    	vis[U]=1;
    	++nowsiz;
    	if(!vis[a[U]]){
    		df2(a[U]);
    	}
    }
    int main(){
    	while(scanf("%d%d",&n,&m)!=EOF){
    		memset(cnts,0,sizeof(cnts));
    		++zu;
    		for(int i=0;i<n;++i){
    			scanf("%d",&a[i]);
    		}
    		for(int i=0;i<m;++i){
    			scanf("%d",&b[i]);
    		}
    		for(int i=0;i<m;++i){
    			if(!vis[i]){
    				nowsiz=0;
    				dfs(i);
    				++cnts[nowsiz];
    			}
    		}
    		memset(vis,0,sizeof(bool)*m);
    		ll ans=1;
    		for(int i=0;i<n;++i){
    			if(!vis[i]){
    				nowsiz=0;
    				df2(i);
    				int allcanb=0;
    				for(int i=1;i*i<=nowsiz;++i){
    					if(nowsiz%i==0){
    						if(i*i==nowsiz){
    							allcanb+=cnts[i]*i;
    						}
    						else{
    							allcanb+=cnts[i]*i;
    							allcanb+=cnts[nowsiz/i]*(nowsiz/i);
    						}
    					}
    				}
    				ans=ans*(ll)allcanb%MOD;
    			}
    		}
    		printf("Case #%d: %lld
    ",zu,ans);
    		memset(vis,0,sizeof(bool)*n);
    	}
    	return 0;
    }
  • 相关阅读:
    asp.net 曲线图
    asp.net 图片下载
    使用a标签删除进行提示
    asp.net 后台获取input的值
    asp.net Excel数据导入到数据库中
    asp.net DataSet数据导出到Excel中
    select top 所有
    asp.net 上一条和下一条记录的显示
    日期相减函数
    mybatis mapper学习1(补充)-mapper.xml映射文件生成补充
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7236671.html
Copyright © 2011-2022 走看看