【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的更多相关文章

  1. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  8. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

  9. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

随机推荐

  1. webpack(零工程构建一个前端项目)详解

    工作流程记录: 1.初始化项目:npm init -y 2.安装webpack,vue,vue-loader npm install webpack vue vue-loader 3.按装之后根据警告 ...

  2. caioj 1077 动态规划入门(非常规DP1:筷子)

    首先可以看出排序之后,最优解肯定是每一对都相邻才是最优的 那么我们就要找构成最优解的相邻组 设f[i][j]是前i个字符,k对的最小值 如果当前这个筷子不取的话,f[i][j] = f[i-1][j] ...

  3. caioj 1075 动态规划入门(中链式2:能量项链)(中链式dp总结)

    我又总结了一种动归模型-- 这道题和上一道题很类似,都是给一个序列,然后相邻的元素可以合并 然后合并后的元素可以再次合并 那么就可以用这两道题类似的方法解决 简单来说就是枚举区间,然后枚举断点 加上断 ...

  4. JDK工具(零)--简要介绍JDK1.6自带的42个工具

    Java的开发人员肯定都知道JDK的bin目录中有"java.exe"和"javac.exe"这两个命令行工具, 但并非所有的Java程序员都了解过JDK的bi ...

  5. 【Codeforces Round #462 (Div. 1) A】 A Twisty Movement

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] ans初值值为a[1..n]中1的个数. 接下来考虑以2为结尾的最长上升子序列的个数. 枚举中间点i. 计算1..i-1中1的个数c ...

  6. docker安装cloudera manager,切换cloudera-scm用户报错can not open session

    在root帐号下su - cloudera-scm报错can not open session 在网上搜,大概是说ulimit超过限制之类,搞了很久才找到/etc/security/limits.d/ ...

  7. 使用commons-email发邮件

    这里我用到了两个包: commons-email-1.3.2.jar mail-1.4.1.jar 如果不加mail.jar,就可能会抛出NoClassDefFoundError异常 之后代码引用ht ...

  8. [React] Pass a function to setState in React

    In React, when you want to set the state which calculation depends on the current state, using an ob ...

  9. BestCoder Round #11 (Div. 2)

    太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...

  10. SharePoint Search之(五)Query spelling correction— 查询拼写纠正

     Query spelling correction 在使用搜索引擎的时候.假设一不小心输入错误,或者对于某个词语记得不太清楚,搜索引擎会自己主动纠正: 这个功能可以缩短用户的时间,很好用.在Sh ...