传送门

题意

给出一个\(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(循环群/节+找公式)的更多相关文章

  1. HDU-6038 Function 思维+循环节

    解法:这道题很有意思,值得一做和细细思考. 首先是我们要观察这个映射公式,他的实质是什么?其实就是b到a的循环映射,这是因为a数列和b数列都是0-n-1的排列,意味着每个数都是唯一的,那么ab的这个循 ...

  2. hdu6038 Function 函数映射

    /** 题目:hdu6038 Function 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给定一个a排列[0,n-1],一个b排列[0, ...

  3. hdu 3054 Fibonacci 找循环节的公式题

    Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Proble ...

  4. 感恩节MathType公式编辑器6折优惠启动

    MathType是由美国Design Science公司开发功能强大的公式编辑器,专门用来对数学公式的编辑,与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号.感恩节期间 ...

  5. hdu4696 Answers(循环节+找规律)

    题意: 分析: 容易想到先把T数组按位置和对应权值建一个有向图(类似置换群那种指法) 然后图建完了,如果C[]里面都是2,那显然只能凑出那些偶数,奇数是不能凑出来的 如果C[]有1有2呢? 事实上是可 ...

  6. 【置换群】【枚举约数】hdu6038 Function

    把b数组的所有置换群求出来,用数组记录一下每个大小所出现的次数. 然后求a的置换群,对每个置换群求能被其整除的b的置换群的大小总和(只有这些才能满足构造出一个f,且不自相矛盾),然后把它们全都乘起来就 ...

  7. 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 ...

  8. [数]青蛙的约会&Strange function

    拓展欧几里得:求导&二分 POJ-1061 拓展欧几里得的应用,需要开long long 第一次做这个题的时候进行了毫无用处的找公式(?),是个现在的我看不懂的迷之思路. 第二发的时候还是不明 ...

  9. 第10.1节 Python的模块及模块导入

    一. 什么是模块 Python中的模块即单个的Python代码文件,为什么称为模块呢?这是因为在Python中,每个独立的Python文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间 ...

随机推荐

  1. 零基础学python-3.2 变量赋值

    这一节我们来具体展开变量赋值 1.以下我们举各种赋值的样例 anInt=12 anFloat=2.2 anStr='string' aList=['a','a','a'] anArray=(1,2,3 ...

  2. Python——类的高级主题

    介绍关于类的一些高级主题,这些是可选的,在Python应用程序中,不会常常遇到. =========================================================== ...

  3. DTD笔记

    DTD(Document Type Definition)文档类型定义: DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形成统一规范的文档. 在XML文档中使用D ...

  4. Linux编程---进程通信

    Linux的通信方式主要有分类有以下几种: -匿名管道和FIFO有名管道 -消息队列,信号量和共享存储 -套接字 对于套接字的进程通信,我就留在套接字的文章中再写了. 一.管道 管道是最古老的进程通信 ...

  5. for in 与for of

    最近在项目中需要用到遍历对象,用ES6 for of对象后报如下错误  TypeError: [object Object] is not iterable!,网上查询阮大神的教程发现“ES6 的有些 ...

  6. jmeter3.0_bodydata中存在中文乱码

    jmeter3.0_bodydata中存在中文乱码 1.进入jmeter.properties配置文件 找到#jsyntaxtextarea.font.family=Hack ,并将“#”取消并重启j ...

  7. CentOS笔记-yum

    yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. yum [options] [command] [p ...

  8. Flume-ng-sdk源码分析

    Flume 实战(2)--Flume-ng-sdk源码分析 - mumuxinfei - 博客园 http://www.cnblogs.com/mumuxinfei/p/3823266.html

  9. UIView局部点击

    今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击.可以通过重写hitTest:withEven ...

  10. jsp 中 jstl c:if等标签失效问题

    <c:if test="${page == 1}"> ${s.index+1} </c:if> <c:if test="${page > ...