容斥定理\莫比乌斯反演
wing_wing_wing
前速前进,Yoshiko!
展开
-
CSU 1325 A very hard problem (莫比乌斯反演)
思路:第二问直接处理得到。 关键是第一问,问的是gcd为p约数的有序对的个数。 举个栗子:p等于6 那么 f(1)=μ(1)∗F(1∗1)+μ(2)∗F(1∗2)+μ(3)∗F(1∗3)+μ(4)∗F(1∗4)... f(1) = \mu(1)*F(1*1) + \mu(2)*F(1*2) + \mu(3)*F(1*3) + \mu(4)*F(1*4) ... f(2)=μ(1)原创 2017-08-07 21:50:55 · 217 阅读 · 0 评论 -
BZOJ 2440 完全平方数 (莫比乌斯函数 容斥)
思路:对于每一个数x,我们需要二分答案位置p考虑 [1,p][1,p] 有多少满足条件的数,如果这个数等于x,那么说明我们二分的答案p可能是答案(如果p正好是一个完全平方数或完全平方数的整数倍,那么这个p就不是答案,我们需要接着二分)然后是统计区间 [1,p][1,p] 里满足条件的数的个数的方法。 首先我们先假设这个区间里都是满足条件的,那么有res = p个。 然后我们从i=2开始枚举小于原创 2017-08-04 21:18:10 · 218 阅读 · 0 评论 -
SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
思路:跟bzoj 2190差不多,这道题是那个的升级版,这个变成了三维的。 思路一模一样。 算完三维的,记得加上3个剩下的2维的平面上点的贡献就好。#include<stdio.h>#include <iostream>#include<string.h>#include<math.h>#include<algorithm>#define eps 1e-8typedef long l原创 2017-08-11 21:09:47 · 230 阅读 · 0 评论 -
BZOJ 2005 能量采集(莫比乌斯反演+分块)
思路:跟bzoj 2190那题差不多。 在对gcd(i,j)==kgcd(i,j)==k的贡献做统计是分别对于每个k做统计就ok了,分块这种东西不是顺手就加上了吗。。#include<stdio.h>#include <iostream>#include<string.h>#include<math.h>#include<algorithm>#define eps 1e-8typede原创 2017-08-11 21:05:57 · 158 阅读 · 0 评论 -
BZOJ 2190 仪仗队 (莫比乌斯反演)
思路:从 (0,0)(0,0) 开始编号,构造一个n+1阶的矩阵,通过观察我们发现,从(0,0)(0,0) 点看去,点(4,6)(4,6) 一定被点(2,4)(2,4) 挡住了。我们发现,只有当gcd(i,j)==1gcd(i,j)==1 的点,才能被看到,所以,问题转化成了求(1,n)(1,n) 区间内,gcd(i,j)==1gcd(i,j)==1 的无序点对的个数。然后我们需要加上(0,1)(0原创 2017-08-11 20:56:58 · 272 阅读 · 0 评论 -
hdu 4746 Mophues (莫比乌斯反演 + 分块+线性筛)
注意:因为是多组询问(5000)而n又高达5e5,所以我们每次的时间一定要控制在logn或sqrt(n)内才能1s过,分块是必须的了。然后是一个坑点:必须在线性筛里统计数量,自己写函数一个个统计会t在这上。跟csu 1325的思路类似:需要预处理出 F(i)F(i) 的系数,然后求前缀和分块。然而这题p的值会影响某些F(i)F(i) 的系数,所以我们需要将不同的p值的前缀和分别保存下来。注意此题当p原创 2017-08-09 17:06:35 · 330 阅读 · 0 评论 -
BZOJ 2301 Problem b (莫比乌斯反演+区间容斥+分块)
思路:这个题算是bzoj 1695的加强版吧,同样是给你a,b,c,d,k五个数,只不过这次a和c都不一定是1了。那么我们需要进行区间的容斥定理(注意端点值)。同时由于数据量很大,我们还需要分块。容斥: fanyan(b,d)−fanyan(a−1,d)−fanyan(b,c−1)+fanyan(a−1,c−1)fanyan(b,d) - fanyan(a-1,d) - fanyan(b,c-1)原创 2017-08-11 20:22:32 · 204 阅读 · 0 评论 -
BZOJ 2818 Gcd + spoj 4491(莫比乌斯反演 分块)
思路:数据范围1e7,预处理出miu的前缀和,对于每个素数,反演式求 f(i)f(i) 分块,出结果。拓展:如果是多组样例,那么预处理F(i)F(i) 的系数,每次询问是sqrt(n)的复杂度查询。代码在下方。#include<stdio.h>#include <iostream>#include<string.h>#include<math.h>#include<algorithm>#d原创 2017-08-11 20:42:01 · 238 阅读 · 0 评论 -
HDU 5212 code (莫比乌斯反演)
思路:首先看数据范围1e4就知道不能用n^2的方法。 所以我们要统计每个数作为gcd对答案的贡献。 而统计一个区间内有多少个 gcd(i,j)=kgcd(i,j) = k 的无序数对,当然就是上莫比乌斯喽~ 反演式: 对于这道题,由于是给定的n个数,而不是一个区间,所以我们不能o(1)的求出F(i)的值了,所以先nlogn的预处理出F(i)的的值,然后nlogn的统计出所有f(i)。原创 2017-08-09 10:44:45 · 267 阅读 · 0 评论 -
HDU 1695 GCD (莫比乌斯反演入门学习小结)
前言:这些天在学习莫比乌斯的过程中看了许多博客和众多大牛的解释,然而可是博主太菜的原因,一直没能好好理解,今天偶然间看到了一份吉大附中的ppt,感觉瞬间开了窍,所以先把这个材料推荐给大家,然后我再这里总结一下自己的体会。ppt地址: https://wenku.baidu.com/view/e6645609d15abe23492f4db0.html (以下图片取自ppt,仅供学习与交流使用)上图中原创 2017-08-07 15:46:02 · 425 阅读 · 0 评论