【hdu 6038】Function
【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 long
const 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;
}
【hdu 6038】Function的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- git提交的规范
- JavaScript设计模式(biaoyansu)
1.构造器模式——创建类模式 ES6:class Student{ constructor(score,quality){ this.score = score this.quality = qu ...
- 紫书 例题 10-23 UVa 10213(欧拉公式+高精度)
用欧拉公式V-E+F=2 V是顶点数,E是边数,F是面数 具体推导见https://blog.csdn.net/QWsin/article/details/53635397 要用高精度 #includ ...
- xml里面product的值在哪里设置的?
转载请注明出处:http://blog.csdn.net/droyon/article/details/39890469 在进行Android应用程序开发时,善于运用xml中的product配置,能够 ...
- 仿小米简约Calculator
上个星期的时候,我想教我朋友做一个简单的app.想来想去教什么比較好.当时看见小米的计算器认为比較美丽,就想这个简单.然后就開始动手做了.我以为能够一个小时能够搞定.没想到花了快一天的时间. 哎.突然 ...
- html&css基础笔记
有道笔记:http://note.youdao.com/noteshare?id=a6d7eab195085655bbfce86665524e35 一 HTML结构标签 HTML基本标签 标题标签 & ...
- 25.Detours劫持技术
Detours可以用来实现劫持,他是微软亚洲研究院开发出来的工具,要实现它首先需要安装Detours. 安装地址链接:https://pan.baidu.com/s/1eTolVZs 密码:uy8x ...
- Ubuntu 16.04 实现有线 无线同时用
因为工作的原因,经常会用有线网卡连接服务器进行配置,无线网卡上外网. 一.查看当前网关信息 pipci@ubuntu:~$ ip route showdefault via 192.168.2.1 d ...
- C/C++(C++重载,默认参数,引用)
C++重载详解 重载就是同名而非同义,具体意义根据上下文的语境而言. 重载规则: 1,函数名相同. 2,参数个数不同,参数的类型不同,参数顺序不同,均可构成重载. 3,返回值类型不同则不可以构成重载. ...
- 【搭建Saltstack运维工具】
目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓S ...