【Link】:http://codeforces.com/contest/834/problem/C

【Description】

给你两个排列a和b;
a排列的长度为n,b排列的长度为m;
a∈[0..n-1],b∈[0..m-1];
然后让你求一个函数f[i];
f[i]的定义域为0..n-1,值域为0..m-1
同时使得对于任意f[i],i∈[0..n-1];
f(i)=bf(a[i])成立;

【Solution】

原始可以递推一下;
f(i)=bf(ai)=bbf(aai)
则可以一直写下去f[i]=bbbbbf(aaaaa[i]);
注意到a是一个排列;
最后肯定能形成一个环,则aaaaa..a[i]肯定又能变回i

f(i)=b⋯bf(i)l times b
(这里L是第一次回到i的L);
这里的含义其实就相当于f[i]是一个x
要使得
x=b....bx
而b也是一个排列;
也肯定有循环节;
这里从x开始的b数组的循环节长度一定得是上面的a的循环节的长度L的因子;
不然就不能在L次b之后回到x了;
于是,
a数组里找循环节的长度,在b数组中也找循环节的长度;
看看有多少个长度在a中有,且b数组中,有它的因子长度的循环节;
直接累加因子循环节长度到temp中;
然后累乘所有temp即可;
根据上面的形式,每个a循环节中的某一个位置,f只要确定了,其他该循环节中的f值也就确定了,然后那个位置有temp种选择;就是因子循环节中任意一个b[i]都可以;
找因子的时候,需要做些优化;
不然可能退成O(n2)的复杂度;
先枚举a数组有哪些循环节,长度为i;
然后用O(i12)复杂度枚举它可能的因子,(j是则n/j也是)
看看在b中有没有这样长度的;

【NumberOf WA】

0

【Reviw】

求因子的思想很好.

【Code】

#include <bits/stdc++.h>
using namespace std;
#define int long longconst int N = 1e5;
const int MOD = 1e9+7;int n,m;
int a[N+10],b[N+10],cnta[N+10],cntb[N+10];
bool flag[N+10];main(){int kk = 0;while (~scanf("%lld%lld",&n,&m)){for (int i = 1;i <= n;i++){scanf("%lld",&a[i]);a[i]++;}for (int i = 1;i <= m;i++){scanf("%lld",&b[i]);b[i]++;}memset(cnta,0,sizeof cnta);memset(cntb,0,sizeof cntb);memset(flag,0,sizeof flag);for (int i = 1;i <= m;i++)if (!flag[i]){int x = i,num = 0;while (!flag[x]){flag[x] = 1;num++;x = b[x];}cntb[num]++;}memset(flag,0,sizeof flag);for (int i = 1;i <= n;i++)if (!flag[i]){int x = i,num = 0;while (!flag[x]){flag[x] = 1;num++;x = a[x];}cnta[num]++;}int ans = 1;for (int i = 1;i <= n;i++)if (cnta[i]>0){int temp = 0;for (int j = 1;j*j <= i;j++)if (i%j==0){temp = (temp + j*cntb[j])%MOD;if (j != i/j)temp = (temp + (i/j)*cntb[i/j])%MOD;}while (cnta[i]--){ans = (ans*temp)%MOD;}}printf("Case #%lld: %lld\n",++kk,ans);}return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7626148.html

【hdu 6038】Function相关推荐

  1. 【HDU - 5875】Function(线段树,区间第一个小于某个数的数 或 RMQ二分)

    题干: The shorter, the simpler. With this problem, you should be convinced of this truth.        You a ...

  2. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)

    题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...

  3. 大数加法【HDU 1002】

    大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...

  4. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

    题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...

  5. 【HDU - 1455】Sticks (dfs + 剪枝)

    题干: George took sticks of the same length and cut them randomly until all parts became at most 50 un ...

  6. 【HDU - 4006】The kth great number (优先队列,求第k大的数)

    题干: Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to wri ...

  7. 【HDU - 4217 】Data Structure? (线段树求第k小数)

    题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...

  8. 【HDU 5765】Bonds(进制运算妙用)

    [HDU 5765]Bonds(进制运算妙用) Bonds Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K ...

  9. 【HDU 5755】Gambler Bo(高斯消元)

    [HDU 5755]Gambler Bo(高斯消元) Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072 ...

最新文章

  1. 程序员的朋友圈应该是这样的。。。
  2. VMWare虚拟机与主机共享文件夹(如何安装VMWare tools)windows与windows共享
  3. 转: 如何从keystore file中查看数字证书信息
  4. 用java设计一个二叉树类的结构,二叉树的基本结构以及java实现
  5. h5 php js实验总结,H5学习_番外篇_PHP数据库操作
  6. 数据挖掘 python框架_8个最高效的Python爬虫框架
  7. MySQL 我们来聊聊 count(*) 语句的优化方式有哪些?
  8. html5标签属性大全_html5 文本相关标签
  9. VC之CString,wchar_t,int,string,char*之间的转换
  10. Windows下Pycharm专业版2021.2以及Anaconda安装教程
  11. kindeditor 加载 html,为kindeditor编辑器添加“引用”(blockquote)标签
  12. 编程c语言黑与白,C语言黑与白问题代码及解析
  13. C++多线程传参详解
  14. 基于CIFAR100的VGG网络结构详解
  15. 智能秤方案设计——蓝牙体脂秤PCBA方案
  16. donald knuth --图灵奖获奖者
  17. Python PyAutoGUI和Pywinauto区别及安装
  18. 在html中页面打开次数计算,实现页面访问次数统计
  19. GB/T 2423.16电工电子产品环境试验第⒉部分:试验方法试验J及导则:长霉
  20. 惊喜!做嵌入式UI还能用javascript

热门文章

  1. 如何防止token被拦截_Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
  2. ServletContext接口
  3. 课程设计完成之后要考虑的问题
  4. android pptx mime类型,application/vnd.android.package-archive是Apk的MIME类型
  5. python自动化开发例子_Python自动化开发从浅入深-语言基础(常用模块)
  6. python热成像_在python中自动从图像中移除热/死像素
  7. python之__name__
  8. 100多本python书,免费电子版下载
  9. 美国人口普查年收入比赛_训练网络对收入进行分类:成人普查收入数据集
  10. PC如何控制device进入suspend模式