序列变换

题目描述

\(lyk\) 有两序列 \(a\) 和 \(b\)。

\(lyk\) 想知道存在多少对 \(x,y\),满足以下两个条件。

\(1:\gcd(x,y)=1\)。

\(2:a_{b_x} = b_{a_y}\)。

例如若 \(a={1,1,1},b={1,1,1}\)。那么存在 \(7\) 对,因为除了 \(x=2,y=2\) 或 \(x=3,y=3\) 外都满足条件。

输入

第一行一个数 \(n(1<=n<=100000)\)。

接下来一行n个数,表示 \(ai(1<=ai<=n)\)。

接下来一行n个数,表示 \(bi(1<=bi<=n)\)。

输出

一行表示答案

输入样例

3

1 1 1

1 1 1

输出样例

7

解析

这是我第一次用莫比乌斯反演性质二的第一题

先打出莫比乌斯反演性质二:

有数论函数 \(f(n)= \sum_{d|n} g(d)\)

逆求 \(g(n)\)

则有:

\[g(n)=\sum_{d|n} f(d) \mu(\frac{n}{d})
\]

日后再证

然后套路解题

\[f(x) = \sum_{i=1}^n \sum_{j=1}^n [\gcd(i,j)=x][a_{b_i} = b_{a_j}]
\]

再设

\[F(x)=\sum_{x|d} f(d)
\]

然后玩第二个式子

\[\begin{aligned}
F(x)
&=\sum_{x|d} f(d) \\
&=\sum_{x|d} \sum_{i=1}^n \sum_{j=1}^n [\gcd(i,j)=d][a_{b_i} = b_{a_j}] \\
&=\sum_{i=1}^n \sum_{j=1}^n [x|gcd(i,j)][a_{b_i} = b_{a_j}] \\
&=\sum_{x|i} \sum_{x|j} [a_{b_i} = b_{a_j}]
\end{aligned}
\]

那么,答案就是:

\[f(1) = \sum_{i=1}^n F(i) \mu(i)
\]

求 \(f(1)\) 我们期望是 \(O(n)\)

所以我们要预处理出 \(\mu\) 和所有 \(F(i)\)

如何快速计算 \(F(i)\) ?

呵呵,先开个桶,然后~~~

看我代码吧,政治觉悟略高的同志必然能看得懂

代码

#include<cstdio>
using namespace std;
typedef long long LL; const int N = 1e5;
int a[N + 5] , b[N + 5] , n , mu[N + 5] , tot , prime[N + 5] , vis[N + 5];
LL cnt[N + 5] , F[N + 5] , ans; inline void getF()
{
for(register int i = 1; i <=n; i++)
{
for(register int j = i; j <= n; j += i) cnt[a[b[j]]]++;
for(register int j = i; j <= n; j += i) F[i] += cnt[b[a[j]]];
for(register int j = i; j <= n; j += i) cnt[a[b[j]]]--;
}
} inline void getmu()
{
mu[1] = 1;
for(register int i = 2; i <=n; i++)
{
if (!vis[i]) mu[prime[++tot] = i] = -1;
for(register int j = 1; j <= tot && prime[j] * i <= n; j++)
{
vis[prime[j] * i] = 1;
if (i % prime[j] == 0) break;
mu[prime[j] * i] = -mu[i];
}
}
} int main()
{
scanf("%d" , &n);
for(register int i = 1; i <= n; i++) scanf("%d" , &a[i]);
for(register int i = 1; i <= n; i++) scanf("%d" , &b[i]);
getF() , getmu();
for(register int i = 1; i <= n; i++) ans += (LL)mu[i] * F[i];
printf("%lld" , ans);
}

51nod 1675.序列变换的更多相关文章

  1. 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]

    序列变换 alpq654321 (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...

  2. 51nod 1294 :修改数组 && HDU 5256:序列变换

    1294 修改数组 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  取消关注 给出一个整数数组A,你可以将任何一个数修 ...

  3. 2015年百度之星初赛(1) --- C 序列变换

    序列变换 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 序列变换(hdu5248)

    序列变换 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 序列变换(Lis变形)

    序列变换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. hdu 5256 序列变换 (LIS变形)

    序列变换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. 51nod 1483 化学变换 | 二进制 暴力

    51nod 1483 化学变换 题面 给出n个整数(n <= 1e5,每个数 <= 1e5),对每个数都可以进行多次操作,操作有两种:乘二/整除以二. 问最少经过多少次操作能使所有数相等. ...

  8. LIS 2015百度之星初赛2 HDOJ 5256 序列变换

    题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...

  9. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 /* 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 比赛时以为是贪心,榨干智商也想不出来:( ...

  10. luogu P3411 序列变换

    链接 P3411 序列变换 如果要最小化答案,那么就最大化不移动的数. 那么不移动的子序列一定是最后答案的一段连续区间,而移动的数我们是一定有办法把他们还原的. 设\(f_{i}\)表示\(i\)点的 ...

随机推荐

  1. 关于mysql数据库user表没有password字段

    解决 这个是因为mysql的版本问题,是mysql 5.7版本出现的,具体是mysql 5.7.x 开始变化的我不知道 新的字段变更为authentication_string 修改密码的方式还是和原 ...

  2. day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit & 排序order

    day18 两个表student和user student id s_name s_age s_sex user id u_name u_age u_sex 批量插入 insert into stud ...

  3. 【大数据-课程】高途-天翼云侯圣文-Day1:互联网大数据揭秘(大数据介绍&MR实现双十一举牌)

    一.大厂职级 P7:年薪百万 二.大数据发展 1.职业路线和岗位角色 2.大数据行业发展 三.大数据的位置 1.热门行业 大数据承上启下 2.三者关系 啤酒和尿不湿:启发可以放在一块 3.大数据作用 ...

  4. 2020最新Java面试题及答案(带完整目录).pdf

    一.JVM 二.Java集合 三.Java多线程并发 四.Java基础 五.Spring原理 六.微服务 七.Netty与RPC 八.网络 九.日志 十.RabbitMQ 十一.MongoDB 十二. ...

  5. 【c#】从外部复制文本、图片到我的软件中的解决方案(支持ppt,qq等)

    原文地址 https://www.cnblogs.com/younShieh/p/17010572.html 如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~       我们先考虑 ...

  6. 就聊聊不少小IT公司的技术总监

    本文想告诉大家如下两个观点. 1 很多IT小公司的技术总监,论能力其实也就是相当于大公司的高级程序员. 2 程序员在职业发展过程中,绝对应该优先考虑进大厂或好公司.如果仅仅停留在小公司,由于小公司可能 ...

  7. python之路24之 面向对象动静态方法、继承、派生

    昨日内容回顾 人狗大战 1.直接使用字典表示人和狗 p1 = {} p2 = {} p3 = {} p4 = {} 2.封装产生人和狗的函数 def crreate_person():pass def ...

  8. Blazor WebAssembly的初次访问慢的优化

    Blazor WebAssembly初次访问需要加载很多dll,体积较大,因此第一次加载比较慢. 针对此问题Microsoft提供了优化方案:压缩 https://learn.microsoft.co ...

  9. ABP Framework 手动升级指南:从6.0.1升级到7.0.0

    ABP 7.0.0 正式版已经发布,ABP-Framework-All-In-One 项目同步升级. LeptonX Lite Theme 目前还没有包含在源码解决方案中,还是以 Nuget 包提供, ...

  10. 移动端安卓开发学习记录--Android Studio使用adb链接夜神模拟器常用指令

    1.下载安装模拟器,打开模拟器,本步骤不再赘述 2.打开模拟机器安装路径,在地址栏输入cmd,回车,就会打开命令行窗口 3.输入 nox_adb.exe connect 127.0.0.1:62001 ...