容斥原理
文章平均质量分 85
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
HDU 5514 Frogs ACM/ICPC 2015 Shenyang(容斥原理)
有很多个青蛙在绕着一个圆圈跳,第i只青蛙每次能够跳ai步,然后起始点为0,问你把所有青蛙能够踩到的点的位置编号加起来结果是多少。 有了之前一道博弈题的经验,我们很快能够知道,如果一只青蛙每次跳的距离是ai,那么所有gcd(ai,m)的倍数的编号都能够被走到。于是就相当于求所有的gcd的倍数的和。问题很快就出现了,会出现重复。 计算倍数的和与计算倍数的个数很类似,于是很容易想到之前多校的TrickGCD那题,那题就是用莫比乌斯函数去容斥。但是这题m的范围很大,不可能求出莫比乌斯原创 2017-09-03 23:21:57 · 419 阅读 · 0 评论 -
CodeForces 1139D Steps to One(期望DP + 容斥原理)
大致题意:一个数列,一开始是空的,每次往他最后一个位置随机的加上一个[1,m]范围内的数字,然后对当前数列所有的数字求gcd,如果gcd不为1,那么就继续添加,否则停止。问最后这个数列期望的长度。这是一个比较明显的期望dp。我们考虑dp[i]表示初始gcd为i的时候也即数列的第一个数字为i的时候,这个数列的期望长度。显然,有转移方程: ...原创 2019-03-23 20:49:14 · 470 阅读 · 5 评论 -
计蒜客 ICPC沈阳网络赛 Convex Hull(容斥原理 + 莫比乌斯函数)
大致提议:求题目中所给式子的求和。真的是非常非常非常简单的一道题目,式子都推对了,我竟然去想杜教筛而没有想容斥……根据函数的定义,很容易发现这个函数其实是或者说。然后对于题目给的式子,我们可以交换一下求和次序,可以得到: 然后把它拆开成为两部分: ...原创 2018-09-18 22:03:41 · 385 阅读 · 0 评论 -
HDU 6314 2018HDU多校赛第二场 Matrix(容斥原理+组合计数)
大致题意:有一个m*n的矩阵,每一个格子只能够涂上黑或者白,然后现在要求至少有a行和b列全部涂黑,问有多少种涂色方案。首先,%%% dls。这个容斥原理还是挺好想的,但是把一个的求和式子优化到还是tql……题目要求是至少有a行和b列全部涂黑,那么可以考虑最后的答案,其中time(u,x)表示恰好有u行和x列被涂黑的方案,也意味着有n-u行和m-x列没被完全涂黑,于是有: ,其中这个f(n-u,m-x)表示n-u行和m-x列没被完全涂黑的方案数。接下来,我们就来讨论如何去求这个f(n-u,m-x)。讨论没被完原创 2018-07-27 15:34:12 · 931 阅读 · 0 评论 -
BZOJ 2301 Problem b(莫比乌斯反演+容斥原理)
要求两个区间范围内的数字的gcd为k的对个数。这种两个数字范围的题目按照套路都是要用容斥原理拆分成四个子问题。每个子问题形式为cal(a,b,k),即两个数字的取值范围分别是[1,a]和[1,b],然后去求解个数。我们考虑把询问写成gcd(a,b,k)的形式,那么显然有gcd(a,b,k)==gcd(a/l,b/k,1)。我们令f(i)=gcd(a,b,i),即f(i)为gcd(a,b)==i这样的(a,b)个数,然后令F(i)为i | gcd(a,b)这样的(a,b)的对数。显然有 。根据定义,我们可以原创 2018-07-28 15:36:29 · 307 阅读 · 0 评论 -
SPOJ TSUM Triple Sums(FFT+生成函数+容斥原理)
大致题意:给你N个数字,然后从中任意挑选三个数字并求和,让你输出和的所以可能以及对应取到每个和的方案数。 由于是加法,考虑用生成函数,两个生成函数相乘可以得到任意两个项相加的和,三个也是一样。由于|si| <=20000,因此首先把si整体扩大20000防止出现负数。令A为对应的生成函数,我们可以发现,A*A*A的结果回出现重复。A*A*A=三个数字一样+其中两个数字一样+三个数字不相同。于是考虑容斥,减去重复的。令A*A*A表示总体,B表示取两个相同数字,那么A*B=其中两个数字一样+三个原创 2018-05-03 15:32:18 · 600 阅读 · 0 评论 -
HDU 2204 Eddy's爱好(容斥原理)
就是求在n以内,有多少个数字可以表示为M^K的形式。 如果考虑M的话,由于M可以很大,所以即使容斥也不现实。我们可以创造性的考虑观察这个指数K,因为这个指数K的取值要小于61。注意到如果有M^(ab)那么一定有(M^a)^b。什么意思呢?就是如果指数不是质数,那么一定可以每另外一组数字表示,且这组数字的指数是质数。所以说我们只需要统计指数是质数的数字能够组成多少个n以内的数字。显然,如果M^K<n,那么i^K<n,其中1<i<=M。于是每一个质数指数的贡献也就可以求出,原创 2018-04-06 16:15:58 · 286 阅读 · 0 评论 -
HDU 6194 String ACM/ICPC 2017 Shenyang Online(后缀数组+容斥原理+线段树/ST)
据说这题是另一道SPOJ的一道后缀自动机的弱化版,好腻害的样子……这里用后缀数组解。 大致题意,给你一个字符串,然后问你在这个字符串中,恰好出现k次的不同子串有多少个(可以相互重叠)。 首先明确所有后缀数组题目都很重要的一点,即所有子串都是某个后缀的前缀,大部分都可以转化为lcp的问题。然后我之前在POJ上做了一道题,没有写博客,是求一个字符串中最长的出现至少k次的子串的长度(POJ 3261)。这两道题目类似,在求至少k次的时候用的是同样的方法。 对于这个出原创 2018-03-03 10:52:36 · 282 阅读 · 0 评论 -
POJ 1741 Tree(树分治+容斥原理+树的重心)
一些很神奇的算法杂合在一起的题目。 大致题意:给你一个带边权的树,问你总共有多少对点距离在K以内,这里定义点对是无序的,即(a,b)和(b,a)算是同一对。 其实呢,之前我在做HDU多校赛的一些题目的时候遇到过类似的树上统计的问题,其实这类做法有一个通用的名称——树分治。就是统计树上的东西,我们可以根据树的结构分治,对于一个节点,我可以把它的每个儿子分开治,把儿子当作单独的一个问题处理,然后最后合起来,再去除一些重复的东西即可。这题也正是这么做的。 首先,我们原创 2017-12-04 11:59:47 · 382 阅读 · 0 评论 -
HDU 5942 Just a Math Problem(数论+容斥原理)
很裸的一道数论题,但是故事还是不少的。 先说说自己脑洞大开的想法。首先,说说自己脑洞大开的思路。根据题目的公式,我们很容易发现,很多数字的g(i)函数值其实是相等的,所以说我们统计的时候就可以统计每一个g(i)数值的贡献。相当于,我们就要求出有多少中质数的组合,然后对于每一种质数的组合,我们只需要计算有多少个数字拥有这样的组合形式。由于1e12的数据范围,最多含有11个质数,所以我们可以用dfs枚举所有的质数组合,紧接着再枚举每个质数的次方。在15s的时间内,对于sqrt(n)的小质数来说,原创 2017-10-15 00:01:46 · 611 阅读 · 0 评论 -
HDU 1796 How many integers can you find(容斥原理)
其实是一道简单题…… 大致题意是给你一个数字n,然后有一个集合M,然后问你在从1~n-1中,有多少个数字至少可以被M中一个元素整除。 这题让我想起了当前15年沈阳regional的题目,当时是求每个数字与n的gcd,然后所有gcd的所有倍数和。天真的我认为这两题只是一个是统计数字和,一个是统计数字个数,所以我直接拿了当时的代码改了改然后交,━((*′д`)爻(′д`*))━!!!!啪啪打脸……亏我自己当时还证明了为什么拿约数暴力容斥就可以…… 问题就出在,拿到原创 2017-09-22 10:36:32 · 268 阅读 · 0 评论 -
HDU 5213 Lucky(容斥原理+莫队算法)
其实读完题,想了一下没有什么优化思路,就想到大概是莫队算法了。 大致题意是给你一个数列{ai},和一个固定的奇数K,然后很多个询问,每个询问给出两个区间[l,r]和[u,v],然后问满足ai+aj=K的数对(i,j)有几对,其中i在区间[l,r]中,j在区间[u,v]中。 虽然说知道了要用莫队,但是实际上,这里一个询问有两个区间,这应该如何应对呢?用两个关键字莫队?后来才知道,此题符合容斥原理。我们考虑一个询问(l,r,u,v)我们可以拆开来看。首先有(l,v),即在整个大区原创 2017-09-22 23:01:06 · 339 阅读 · 0 评论 -
HDU 5201 The Monkey King(容斥原理)
隐约可以看出是容斥原理,但是却不知道如何容斥…… 大致题意是,总共有n个桃子,有m只猴子,然后要求第一只猴子得到的桃子数目得是严格的最多,然后问总共有多少种取法。 初始思路,由于总共n个桃子,m只猴子,然后猴子可以不得到桃子,所以利用插板法可以很快求出在不考虑最大最小的情况下,取法总共有C(n+m-1,m-1)种。接着,我们发现,不论哪一种取法,我都能保证存在一只猴子取的桃子数目最多,要满足第一只最多只需要把第一只的与其交换即可,故除以m就是第一只猴子取最多桃子的方案数。那么原创 2017-09-28 21:40:08 · 460 阅读 · 0 评论 -
2017多校训练赛第二场 HDU 6053 TrickGCD(容斥原理/莫比乌斯反演)
最后五分钟A了这题……惊天地泣鬼神啊……一波三折,真是刺激! 最初的想法,由于gcd是大于2的,然后gcd肯定只和质数有关,所以直接枚举,以每一个质数作为gcd,然后分别求出每个质数作为gcd的方案数加起来即可,然后对于每一位,用a[i]/gcd,就可以得到该位置的可选方案数,然后每位乘起来即可。可是事实并没有那么简单,很容易发现,计算完质数2、3的方案数后,所有6的倍数的方案都被重复计算了一次,类似的重复还有很多。怎么解决这个问题呢?原创 2017-07-27 20:28:44 · 904 阅读 · 0 评论 -
2019 CCPC江西省赛 C HDU 6569 Trap(容斥原理 + 组合计数)
大致题意:给你一些边长,问你这些边长可以构成几个不同的等腰梯形且梯形的四条边的gcd为1。首先,我们考虑如果没有这个gcd为1的限制,这题应该怎么做。由于总共只有两千条边,所以我们很容易想到至少用N^2的算法去做。显然,我们可以枚举梯形的腰和其中一个底,这里我们不妨枚举梯形长的那个底。知道这两个之后,我们就要考虑,如何快速的求出第三条边的选择方案。这里,我们约定梯形的腰长为c,...原创 2019-07-22 19:26:57 · 757 阅读 · 0 评论