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文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间 ...
随机推荐
- 删除DataGridView选中行并更新数据库
前面写过一篇文章是DataGridView控件显示数据的,DataGridView在与数据库打交道时会常常出现,也非常有用.通过DataGridView对数据库进行更改和查询都比較方便. 这里我们须要 ...
- 【软件project】菜鸟俯瞰软件project
[背景]初次接触软件project,对软件project不是彻底的了解.但学完一遍软件project,我还是有些感触的. 以下我就对我这阶段的软工学习和理解做一下小小的总结,如有不妥之处.欢迎指正. ...
- (转)C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进 ...
- linux i2c 标准接口(二)
驱动程序操作法:i2c设备的驱动也可以通过普通的设备驱动实现,像往常的驱动一样实现,然后在应用层就可以像读取普通文件一样操作,无需再考虑读写时序.其实普通的设备驱动也可以用两种方法实现, 1)构建字符 ...
- Ajax_HTTP请求以及响应
什么是HTTP请求? 就是从用户的浏览器端向服务器端发送请求 一个HTTP请求一般由四个部分组成 1.HTTP请求的方法或者动作,比如GET或者POST请求 2.请求的URL,也就是请求的地址 3.请 ...
- Tomcat配置,Myeclipse破解和各种设置
转自:http://www.cnblogs.com/tyjsjl/archive/2006/11/14/2156111.html 根据tomcat来配置eclipse和MyEclipse结合使用起来, ...
- MongoDB经常使用命令
首先我们先安装这个数据库.你能够使用windows或者linux,但推荐使用的是linux,我使用的是ubuntu12.04.在下方的网址中共能够下载,基本都是64位的系统. 假设位linux系统也能 ...
- log Configuration
Log4j – Configuring Log4j 2 - Apache Log4j 2 https://logging.apache.org/log4j/2.x/manual/configurati ...
- storage engine option for directoryPerDB
Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...
- CLI和CGI的区别
CGI :“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.以CGI方式运行时,web s ...