51nod 1675.序列变换
序列变换
题目描述
\(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)\)
则有:
\]
日后再证
然后套路解题
设
\]
再设
\]
然后玩第二个式子
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)\) 我们期望是 \(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.序列变换的更多相关文章
- 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]
序列变换 alpq654321 (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...
- 51nod 1294 :修改数组 && HDU 5256:序列变换
1294 修改数组 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 给出一个整数数组A,你可以将任何一个数修 ...
- 2015年百度之星初赛(1) --- C 序列变换
序列变换 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 序列变换(hdu5248)
序列变换 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 序列变换(Lis变形)
序列变换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 5256 序列变换 (LIS变形)
序列变换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 51nod 1483 化学变换 | 二进制 暴力
51nod 1483 化学变换 题面 给出n个整数(n <= 1e5,每个数 <= 1e5),对每个数都可以进行多次操作,操作有两种:乘二/整除以二. 问最少经过多少次操作能使所有数相等. ...
- LIS 2015百度之星初赛2 HDOJ 5256 序列变换
题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...
- 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换
题目传送门 /* 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 比赛时以为是贪心,榨干智商也想不出来:( ...
- luogu P3411 序列变换
链接 P3411 序列变换 如果要最小化答案,那么就最大化不移动的数. 那么不移动的子序列一定是最后答案的一段连续区间,而移动的数我们是一定有办法把他们还原的. 设\(f_{i}\)表示\(i\)点的 ...
随机推荐
- Zabbix技术分享——docker组件编译使用教程
docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,它可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,还可以实现 ...
- PostgreSQL和MySQL的优劣对比
在开发项目的过程中,难免要面对选择数据库的情况.总结此文章是因为在之前公司里使用的都是MYSQL 数据库,而在现在公司里,新项目中使用的是 PostgreSQL 数据库,在使用过程中,经常需要查找两种 ...
- 关于Mybatis-Plus中update()、updateById()方法的使用及null值的判断
使用场景说明: 在 Mybatis-Plus 的使用过程中,经常会遇对数据库更新的情况 更新常用方法:update().updateById() 问题:经常会遇见对 null 值的处理,对传入的实体参 ...
- 实施 GitOps 的三个关键步骤
GitOps 是一种自动化和管理基础架构和应用程序的模型,通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型,例如版本控制.代码审查和 CI/CD 流水线.在实施 DevOps 时,我们找 ...
- <一>C++ STL
STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架. 通俗来说:STL就 ...
- 搭建漏洞环境及实战——在Windows系统中安装WAMP
安装成功之后,打开显示 链接:https://pan.baidu.com/s/1NpU7fUYOO_CSM8dNXKdnCw 提取码:mxvw
- VUE 使用md5对用户登录密码进行加密传输
VUE 使用md5对用户登录密码进行加密传输到数据库 前言 第一步 npm下载js-md5依赖包 第二步 引入js-md5 直接在需要使用md5加密的页面引入 全局挂载,将js-md5添加到vue原型 ...
- 安装node.js与webpack创建vue2项目
本文为博主原创,转载请注明出处: 1.安装node.js 下载地址:http://nodejs.cn/download/ (可查看历史版本) node.js 中文网:http://nodejs.cn/ ...
- 用Dockerfile制作一个java应用镜像,ubuntu基础篇
内容介绍: (1) 本章目的,将一个自行开发的java程序webpay-api,制作为docker自定义镜像,并且进行部署. (2) 实验环境: 物理机:VMware 虚拟机 + CentOS 7.8 ...
- word取消保护
没有 文档的保护密码 可尝试用此方式,亲测有效 Excel.PPT 应该也可以,没试过 1.新建空白文档 2.插入.对象 3.点击[对象]右边的箭头,选择被加密的文件. 建议两个选项都试一下,我的第二 ...