容斥原理
Bahuia
软件工程博士
展开
-
51Nod - 1407 容斥原理 + dp
题意: 有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组。 思路: 这道题需要51nod1406作为基础,链接:点击打开链接 因为从正面考虑直接求解相与和为0不好做,所以可以利用容斥来解决,因为数的总量就这么大,所以我们在总数中减掉相与和为1的方案数,相与和为2的方案数等等,就可以得到最后的答案,可以用dp求出来对于每一个x都有a[i] & x == x的个数(也就是1406原创 2017-02-19 18:50:09 · 1194 阅读 · 0 评论 -
HDU - 5514 容斥原理
题意: m个石头围成一个环,编号从0到m-1,有n个青蛙在编号为0的石头上开始往后跳,每只青蛙可以从第j个石头跳到第j+a[i]个石头,每个石头只要被青蛙跳到一次,就算被占领(永久),问最后被占领的石头的编号总和是多少? 思路: 利用巧妙的容斥思想,并不是简单的套用模板。 首先能够观察到每个青蛙能跳到的位置是d[i] = k * gcd(a[i], m),但是lcm(d[i], d[j原创 2017-02-19 21:23:53 · 707 阅读 · 0 评论 -
HDU - 5794 dp + 容斥思想 + Lucas
题意: 一个n*m的棋盘,初始时刻一枚棋子在(1,1)位置,每次他只能从(x,y)移动到(x+1,y+2)或者(x+2,y+1)的位置,棋盘上还有一些障碍点,这些点不能到达,问最后旗子能到达(n,m)的方案数。 思路: 首先画几个例子,观察旗子能到达的点的规律,统计出规律后发现,能到达的点组成了一个杨辉三角,这时候为了方便处理,进行坐标转换,以杨辉三角最左边的一条边和最右边的一条边作为坐标轴原创 2017-02-20 15:23:59 · 357 阅读 · 0 评论 -
HDU - 5768 容斥原理 + 中国剩余定理
题意: 给出一个范围[l,r]以及两个数组a,p,要求在这范围内mod 7 = 0,且mod p[i] != a[i]的数一共有多少个。 思路: 容斥原理,只考虑把a[0] = 0,p[0] = 7,只考虑这mod 7 = 0的数,进行容斥。利用中国剩余定理解同余式组。 代码: #include using namespace std; typedef long long LL; v原创 2017-03-28 12:20:06 · 623 阅读 · 0 评论 -
HDU 6053 容斥dp 或 莫比乌斯反演
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6053 给出一段长度为n的序列a,要求设计同样长度为n的序列b,要求满足: 1. 1 <= b[i] <= a[i] 2. 对于任意区间[l,r],都要满足gcd(a[l], a[l+1]…a[r])>=2 问有多少种可能的b数组思路:分析题意其实就是要求出有多少种方案可以使b数组全体gcd原创 2017-07-28 13:22:15 · 522 阅读 · 0 评论 -
HDU 6052 暴力计数
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6052 对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望。思路:算贡献,计数问题,这种可能会重复的计数,为了避免重复,需要规定一个计算的顺序,比如按照从上到下,从左到右的顺序给每个同色的点排个序,计算这个颜色的贡献时,对于第i个点,可以计算包括点i以及包括之后所有原创 2017-07-28 21:38:49 · 1722 阅读 · 0 评论