HDU6038:Function(循环群/节+找公式)
传送门
题意
给出一个\(0\sim n-1\)的排列a,一个\(0\sim {m-1}\)的排列b,询问满足$$f(i)=b_{f(a_i)}~~(0\le i\le n-1)$$的函数的个数
分析
由于 \(f(i) = b_{f(a_i)} = b_{b_{f(a_{a_i})}} = \underbrace{b_{\cdots b_{f(i)}}}_{l\text{ times }b}\),我们发现a中的l个数构成了循环群,而只有当\(j为l\)的因子时才满足上述函数(请注意观察公式及结合样例),j为排列b中循环节的长度,l为排列a中循环节的长度。
故先与处理出a和b的拥有的循环群长度及数目。
最终答案为$$\prod_{i=1}^{k}\sum_{j\mid l_i}num[j]*j$$(请仔细思考)
a中每种循环节都是单独的,而a中循环节对应的b中的循环节则要相加
相关题解
trick
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
const ll mod = 1e9+7;
int n,m;
int a[1000100],b[100100];
int numa[100100],numb[100100];
int vis[100100];
ll ans,ret;
void dfs1(int loc,int k)//统计a中循环群长度及数目
{
if(vis[loc]) {numa[k]++;return ;}
vis[loc]=1;
dfs1(a[loc],k+1);
}
void dfs2(int loc,int k)//统计b中循环群长度及数目
{
if(vis[loc]) {numb[k]++;return ;}
vis[loc]=1;
dfs2(b[loc],k+1);
}
int main()
{
int tot=0;
while(scanf("%d %d",&n,&m)!=EOF)
{
R(i,0,n) scanf("%d",a+i);
R(i,0,m) scanf("%d",b+i);
mem(vis,0);mem(numa,0);
R(i,0,n) if(!vis[i]) dfs1(i,0);
mem(vis,0);mem(numb,0);
R(i,0,m) if(!vis[i]) dfs2(i,0);
//F(i,1,n) printf("%d %d\n",numa[i],numb[i] );
ans=1;
for(int i=1;i<=n;++i) if(numa[i])//枚举a中循环群长度
{
ret=0;int len=(int)sqrt(i+0.5);
for(int j=1;j<=len;++j)if(i%j==0)//找到b中为a中循环群长度因子的循环群
{
ret=(ret+1LL*numb[j]*j%mod)%mod;
if(j*j!=i) ret=(ret+1LL*numb[i/j]*(i/j)%mod)%mod;
}
for(int j=1;j<=numa[i];++j) ans=ans*ret%mod;//a中有numa[i]个长度为i的循环群,注意取模
}
printf("Case #%d: %I64d\n",++tot,ans );
}
return 0;
}
HDU6038:Function(循环群/节+找公式)的更多相关文章
- HDU-6038 Function 思维+循环节
解法:这道题很有意思,值得一做和细细思考. 首先是我们要观察这个映射公式,他的实质是什么?其实就是b到a的循环映射,这是因为a数列和b数列都是0-n-1的排列,意味着每个数都是唯一的,那么ab的这个循 ...
- hdu6038 Function 函数映射
/** 题目:hdu6038 Function 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给定一个a排列[0,n-1],一个b排列[0, ...
- hdu 3054 Fibonacci 找循环节的公式题
Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Proble ...
- 感恩节MathType公式编辑器6折优惠启动
MathType是由美国Design Science公司开发功能强大的公式编辑器,专门用来对数学公式的编辑,与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号.感恩节期间 ...
- hdu4696 Answers(循环节+找规律)
题意: 分析: 容易想到先把T数组按位置和对应权值建一个有向图(类似置换群那种指法) 然后图建完了,如果C[]里面都是2,那显然只能凑出那些偶数,奇数是不能凑出来的 如果C[]有1有2呢? 事实上是可 ...
- 【置换群】【枚举约数】hdu6038 Function
把b数组的所有置换群求出来,用数组记录一下每个大小所出现的次数. 然后求a的置换群,对每个置换群求能被其整除的b的置换群的大小总和(只有这些才能满足构造出一个f,且不自相矛盾),然后把它们全都乘起来就 ...
- HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- [数]青蛙的约会&Strange function
拓展欧几里得:求导&二分 POJ-1061 拓展欧几里得的应用,需要开long long 第一次做这个题的时候进行了毫无用处的找公式(?),是个现在的我看不懂的迷之思路. 第二发的时候还是不明 ...
- 第10.1节 Python的模块及模块导入
一. 什么是模块 Python中的模块即单个的Python代码文件,为什么称为模块呢?这是因为在Python中,每个独立的Python文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间 ...
随机推荐
- Intel Edision —— 开发环境选择一贴通
前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. 使用Intel开发板设置工具配置好之后,会自动跳转到集成开发环境(integrated development environment,ID ...
- docker on UP Board
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我的博客: http://www.cnblogs.co ...
- AngularJs概述
- 【手记】走近科学之为什么JObject不能调用LINQ扩展方法
Json.NET的JObject明明实现了IEnumerable<T>,具体来说是IEnumerable<KeyValuePair<string, JToken>> ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- 【网络协议】IP协议、ARP协议、RARP协议
IP数据报 IP是TCP/IP协议族中最核心的协议,全部的TCP.UDP.ICMP.IGMP数据都以IP数据报的格式传输.IP仅提供尽力而为的传输服务.假设发生某种错误.IP会丢失该数据.然后发送IC ...
- (转载)常用的Mysql数据库操作语句大全
打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...
- 【HDU 5384】Danganronpa(AC自己主动机)
看官方题解貌似就是个自己主动机裸题 比赛的时候用kuangbin的AC自己主动机模板瞎搞的,居然A了,并且跑的还不慢.. 存下模板吧 #include<cstdio> #include&l ...
- dubbo配置指南
dubbo配置指南 SLA配置在此完成!Service Layer Agreement ApplicationConfig 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者. Regist ...
- spark集成hivecontext配置
spark版本:spark-1.6.0-bin-hadoop2.6hive版本:hive 1.2.1 1.hive-site.xml<property> <name>hive ...