LOJ2565 SDOI2018 旧试题 莫比乌斯反演、三元环计数
这道题的思路似乎可以给很多同时枚举三个量的反演题目提供一个很好的启发……
首先有结论:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)。正确性证明考虑:对于质数\(p\),设\(i,j,k\)中质因子\(p\)的个数为\(a,b,c\)。在\(x,y,z\)中至多只能有\(1\)个数含质因子\(p\),有以下情况:\(x,y,z\)中都没有\(p\),有1种;\(x\)中有\(p\),有\(a\)种;\(y\)中有\(p\),有\(b\)种;\(z\)中有\(p\),有\(c\)种。那么在\(\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)中\(p\)的贡献为\(a+b+c+1\),而在\(d(ijk)\)中\(p\)的贡献也是\(a+b+c+1\),所以两者等价。
设\(A \leq B \leq C\),\(\frac{x}{y}\)默认下取整。用上述结论化简式子:
\(\begin{align*} \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C d(ijk) & = \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z] \\ & = \sum\limits_{x = 1}^C \sum\limits_{y=1}^C \sum\limits_{z=1}^C[x \perp y][y \perp z][x \perp z] \frac{A}{x} \frac{B}{y} \frac{C}{z} \\ &= \sum\limits_{x = 1}^C \frac{A}{x} \sum\limits_{y=1}^C \frac{B}{y} \sum\limits_{z=1}^C \frac{C}{z} \sum\limits_{p | x , p | y} \mu(p) \sum\limits_{q | x , q | z} \mu(q) \sum\limits_{r | y , r | z} \mu(r) \\ &= \sum\limits_{p=1}^C \mu(p) \sum\limits_{q=1}^C \mu(q) \sum\limits_{r=1}^C \mu(r) \sum\limits_{p | x , q | x}\frac{A}{x} \sum\limits_{p | y , r | y} \frac{B}{y} \sum\limits_{q | z , r | z} \frac{C}{z} \end{align*}\)
\(\sum\limits_{p | x , q | x}\frac{A}{x} = \sum\limits_{lcm(p,q) | x}\frac{A}{x}\),这个可以枚举倍数\(O(nlogn)\)地预处理。所以我们现在需要一种快速的方法枚举\(pqr\)三个量。
不难发现一对\(p,q\)满足条件当且仅当\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)。写一个\((10^5)^2\)的暴力发现好像只有……\(760741\)对满足条件!
那么实际上有用的\(p,q\)不多。不妨构出一个图,对于满足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)的\(p\)和\(q\)连边\((p,q)\),权值为\(lcm(p,q)\),那么在上述的枚举中\(p \neq q \neq r\)的三元组\((p,q,r)\)在图上对应一个三元环,并且能够轻松地通过这个三元环三条边的权值得到这个三元组的贡献。我们直接三元环计数统计这样的三元环的答案,因为图显然不是构造的所以跑不满根号。
因为打表是不现实的,所以我们还要解决如何快速算出满足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)的\(p\)和\(q\)。考虑枚举\(gcd(p,q)\),然后枚举\(p\)和\(q\),当\(lcm(p,q) > C\)时退出,枚举的时候check一下\(\mu(p) , \mu(q) , gcd(p,q)\)是否满足条件。这样的复杂度是\(O(Clog^2C)\)的。
上面三元环计算出了\(p \neq q \neq r\)的贡献,\(p=q=r\)的贡献直接枚举一遍,\(p = q \neq r\)的情况在枚举图上的边的时候可以一并计算。然后这道题就做完了。
据说这道题很卡常,所以注意一些细节:1、这道题中间变量用long long存的下,可以避免大量取模;2、存边用vector而不是前向星可以通过内存连续访问争取到更优秀的常数;3、必要的时候可以循环展开。
LOJ2565 SDOI2018 旧试题 莫比乌斯反演、三元环计数的更多相关文章
- loj#6076「2017 山东一轮集训 Day6」三元组 莫比乌斯反演 + 三元环计数
题目大意: 给定\(a, b, c\),求\(\sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) ...
- BZOJ5332: [Sdoi2018]旧试题(莫比乌斯反演)
时光匆匆,转眼间又是一年寒暑…… 这是小 Q 同学第二次参加省队选拔赛. 今年,小 Q 痛定思痛,不再冒险偷取试题,而是通过练习旧 试题提升个人实力.可是旧试题太多了,小 Q 没日没夜地做题,却看不到 ...
- loj#2565. 「SDOI2018」旧试题(反演 三元环计数)
题意 题目链接 Sol 神仙反演题.在洛谷上疯狂被卡常 Orz shadowice #include<bits/stdc++.h> #define Pair pair<int, in ...
- 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
[BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...
- [SDOI2018] 旧试题
推狮子的部分 \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma(ijk) =\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sum_ ...
- P4619 [SDOI2018]旧试题
题目 P4619 [SDOI2018]旧试题 Ps:山东的题目可真(du)好(liu),思维+码量的神仙题 推式 求\(\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ij ...
- Codechef SUMCUBE Sum of Cubes 组合、三元环计数
传送门 好久没有做过图论题了-- 考虑\(k\)次方的组合意义,实际上,要求的所有方案中导出子图边数的\(k\)次方,等价于有顺序地选出其中\(k\)条边,计算它们在哪一些图中出现过,将所有方案计算出 ...
- BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)
题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\), ...
- [hdu 6184 Counting Stars(三元环计数)
hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C, ...
随机推荐
- noip2017D2T3的几种写法...(BIT/线段树/平衡树)
题意各大oj上都有啦..想必来搜题解的都看过题面了...Qw Solution1: 首先观察n=1的情况,显然就是中间删掉一个数后面加上一个数,并查询那个删掉的数(以后把这样一个过程称为一个操作啦(( ...
- HTML元素(包括HTML5)的标签、属性及事件大全
1.标签列表 标签 描述 <!–…–> 定义注释. <!DOCTYPE> 定义文档类型. <a> 定义超链接. <abbr> 定义缩写. <acr ...
- -bash : ** : command not found的问题解决(图文详解)
问题来源 我不小心,配置错了,少了个export和PATH没配对. source /etc/profile 之前一定要留心,否则出错让你后悔去! 问题导致现象1 问题导致现象2 解决办法 按e键, ...
- 为SSRS配置SMTP服务器身份验证
此处设置外邮地址却无法填写邮箱密码 一.安装SMTP服务 1.在服务管理器中单击“功能” 2.单击“添加功能”打开“添加功能向导”对话框 3.在“选择功能”页上选择“SMTP服务器”并选择“添加必须的 ...
- SQL 连贯操作 [2]
1.alias 用于设置数据表别名 $user = M('User'); var_dump($user->alias('anothername')->select()); 这时在SQL中的 ...
- git 删除本地分支和远程分支
(1)使用命令git branch -a 查看所有分支 其中,remote/origin/master表示的是远程分支 (2)删除远程分支 使用命令 git push origin --delete ...
- 杭电acm 1038题
本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...
- 数据结构_相似三角形优雅值_sjx
问题描述 给你 n 个三角形,每个三角形有一个优雅值,然后给出一个询问,每次询问一个三角形,求与询问的三角形,相似的三角形中的优雅值最大是多少. ★数据输入第一行输入包括 n 一个数字,接下来 n 行 ...
- Java/C++中数组的区别
1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是j ...
- 带参宏定义和inline修饰的内联函数
带参宏定义和inline修饰的内联函数都是在编译时,用函数体替换掉宏调用或函数调用.这样用的好处是减少调用函数所花费的时间. 例如: 算法导论在讲到堆排序时说的,好的堆排序实现一般是把Left(i), ...