数论-容斥原理
lab104_yifan
这个作者很懒,什么都没留下…
展开
-
UVA 11806 - Cheerleaders(数论+容斥原理)
题目链接:11806 - Cheerleaders题意:在一个棋盘上,要求四周的四行必须有旗子,问有几种摆法。思路:直接算很容易乱掉,利用容斥原理,可知AUBUCUD = |A| + |B| + |C| + |D| - |AB| - |BC| - |AC| - |AD| - |BD| - |CD| + |ABC| + |ABD| + |ACD| + |BCD| - |ABCD|由此利用原创 2014-04-29 23:33:06 · 1135 阅读 · 0 评论 -
UVA 1393 - Highways (容斥原理计数)
题目链接:1393 - Highways题意:给定一个n * m的点阵,问两两相连后,能组成多少条至少穿过两个点的直线,并且不是水平或垂直的思路:找过两点的线段,由于是整数坐标,只要他的斜率不是整数,即x / y不是整数就能满足答案,然后先记录下这所有的位置,然后利用容斥原理求出对应每个点可以连出多少条这样的线段,最后去求和,求和的时候要注意,由于有一些是重复计算了,比如1 1 和 2 2原创 2014-05-18 09:23:43 · 2184 阅读 · 0 评论 -
UVA 12075 - Counting Triangles(容斥原理计数)
题目链接:12075 - Counting Triangles题意:求n * m矩形内,最多能组成几个三角形这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对于两点,求他们的gcd - 1,得到的就是他们之间有多少个点,那么情况数就可以求了,然后还是利用容斥原理去计数,然后累加出答案代码:#include #include #include原创 2014-05-18 09:30:30 · 1640 阅读 · 0 评论 -
UVA 11014 - Make a Crystal(容斥原理)
UVA 11014 - Make a Crystal题目链接题意:给定一个NxNxN的正方体,求出最多能选几个整数点,使得任意两点PQ不会使PQO共线。思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O),那么所有点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n),n为素数.因为这些素数中包原创 2014-07-03 22:29:32 · 1486 阅读 · 0 评论 -
UVA 10458 - Cricket Ranking(容斥原理)
UVA 10458 - Cricket Ranking题目链接题意:给定k个区间,要求用这些数字范围去组合成n,问有几种组合方式思路:容斥原理,容斥是这样做:已知n个组成s,不限值个数的话,用隔板法求出情况为C(s + n - 1, n - 1),但是这部分包含了超过了,那么就利用二进制枚举出哪些是超过的,实现把s减去f(i) + 1这样就保证这个位置是超过的,减去这部分后原创 2014-07-27 21:42:01 · 988 阅读 · 0 评论 -
UVA 10542 - Hyper-drive(容斥原理)
UVA 10542 - Hyper-drive题目链接题意:给定一些个d维的方块,给定两点,求穿过多少方块思路:容斥原理,每次选出一些维度,如果gcd(a, b),就会穿过多少点,对应的就减少穿过多少方块,所以最后得到式子d1 + d2 + .. dn - gcd(d1, d2)..+gcd(d1, d2, d3)...代码:#include #inclu原创 2014-09-05 12:41:12 · 1079 阅读 · 0 评论 -
HDU 3929 Big Coefficients(容斥+证明)
(1 + x)^n 的奇数项系数个数等于 2^(bitcount(n)),bitcount(x)为x有多少个1.然后容斥枚举每一项存在不存在,然后容斥加加减减即可这题用二进制枚举会T,只能DFS代码:#include #include #include using namespace std;const int N = 15;typedef long long ll原创 2015-04-16 14:02:07 · 1010 阅读 · 1 评论 -
SPOJ 7001 Visible Lattice Points(莫比乌斯反演)
莫比乌斯反演,注意0的情况特殊考虑下就可以了#include #include #include using namespace std;const int N = 1000005;int mo[N], prime[N], pn;bool vis[N];void Moblus() { memset(vis, false, sizeof(vis)); mo[1原创 2015-04-16 16:22:02 · 624 阅读 · 0 评论