
容斥原理
文章平均质量分 58
SC.ldxcaicai
我很菜=_=
展开
-
2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)
洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为“树形图”。 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现总的有向树个数就等于所有点的度数的乘积。而现在有了环,显然我们应该减去算多了的值。这样的话只需要简单的容斥原理就行了。代码如下:#include<bits/stdc++.h>#define m...原创 2018-07-17 14:02:45 · 192 阅读 · 0 评论 -
bzoj2560: 串珠子(状压dp+简单容斥)
传送门题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和。思路:fif_ifi表示保证集合iii中所有点都连通其余点随意的方案数。gig_igi表示只考虑集合iii中所有点的状态的子图的权值和。我们先预处理出ggg数组,然后考虑递推fff数组。显然fif_ifi是等于gig_igi扣掉一些东西的,扣掉的应该就是不连通的情况...原创 2019-02-09 12:23:43 · 359 阅读 · 0 评论 -
codeforces451 E. Devu and Flowers(容斥原理)
传送门题意简述:给出n堆花,对于第j堆,有f[j]朵花,每堆花的颜色不同,现在要从中选出s朵,求方案数。思路:假设所有花没有上限直接插板法,现在有了上限我们用容斥扣掉多算的状压一下再容斥:fif_ifi表示强制集合iii中的所有堆都超过上限,其余任意的方案数,这样容斥一下就完了。代码:#include<bits/stdc++.h>#include<tr1/uno...原创 2019-02-09 18:04:37 · 438 阅读 · 0 评论 -
codeforces gym 100548F. Color(容斥原理)
传送门题意简述:对n个排成一排的物品涂色,有m种颜色可选。要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数。(n,m≤1e9,k≤1e6n,m\le1e9,k\le1e6n,m≤1e9,k≤1e6)思路:容斥原理套路:先不考虑是否选全kkk种颜色,方案数为Cmk∗k∗(k−1)n−1C_m^k*k*(k-1)^{n-1}Cmk∗k∗(k−1)n−1。然后枚举剩下的...原创 2019-02-09 20:05:59 · 398 阅读 · 0 评论 -
bzoj4767: 两双手(组合数学+容斥dp)
传送门题意简述:你要从(0,0)(0,0)(0,0)走到(ex,ey)(ex,ey)(ex,ey),每次可以从(x,y)(x,y)(x,y)走到(x+ax,y+ay)(x+ax,y+ay)(x+ax,y+ay)或者(x+bx,y+by)(x+bx,y+by)(x+bx,y+by),其中有nnn个障碍点问方案数,所有出现的值的绝对值≤500\le500≤500思路:从(0,0)(0,0)(0,...原创 2019-02-11 11:37:43 · 318 阅读 · 0 评论 -
NOIP训练 友好国度(点分治+容斥)
传送门思路:直接上点分治+容斥计算每个因数对应的贡献即可。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;const int rlen=1<<18|1;inline char gc(){ static char buf[rlen],*ib,*ob; (ib==ob)...原创 2019-03-29 23:30:11 · 155 阅读 · 0 评论 -
SRM 555 div1 MapGuessing(容斥原理)
传送门考虑枚举每个点作为起点,然后状压序列中的哪些位置可以在初始取任意值。假设有kkk个位置,那么这种状态的贡献为2k2^k2k。但这样同一个状态会被算重。于是我们考虑容斥来算。注意剪枝。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;typedef long long ll;...原创 2019-07-15 23:11:54 · 164 阅读 · 0 评论 -
bzoj4596: [Shoi2016]黑暗前的幻想乡(容斥原理+矩阵树定理)
传送门思路:傻子题。直接容斥+矩阵树定理算即可。。。代码:#include<bits/stdc++.h>#define ri register int#define fi first#define se secondusing namespace std;const int rlen=1<<18|1;inline char gc(){ static ...原创 2019-07-15 23:16:42 · 166 阅读 · 0 评论 -
51nod1806 wangyurzee的树(容斥原理+prufer序列)
传送门思路:把关于度数的限制放到prufer序列上。发现可以容斥一波。我们强制一些点一定不满足限制,然后记得特判一个点被加了多个限制的情况。然后就是简单的组合计数。我才不会告诉你我因为阶乘逆元预处理错了wa了十几次呢代码:#include<bits/stdc++.h>#define ri register int#define fi first#define se...原创 2019-07-15 23:21:32 · 131 阅读 · 0 评论 -
SRM 548 div1 KingdomAndCities(补集转化+分类讨论)
传送门m=0m=0m=0的情况就是一个补集转化,用个O(n2k2)O(n^2k^2)O(n2k2)的dpdpdp即可。m=1,2m=1,2m=1,2的情况分类讨论即可。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;const int N=105;typedef long long...原创 2019-07-15 23:53:04 · 186 阅读 · 0 评论 -
NOIp训练 [SCOI2019]RGB(容斥原理)
传送门题意:有一棵树,n个节点,每条边有边权ci,每个点的颜色为R,G,B三种颜色之一(R为红色,G为绿色,B为蓝色)你要统计有序对(U,V)的数量,其中U,V是两个点集它还需要满足以下条件:1、U和V都必须是连通的2、U的颜色只能是红色或者绿色,V的颜色只能是绿色或者蓝色3、存在一个U,V均包含的点x,使得对于所有在U,V集合中的点y,有dis(x,y)≤w答案对10^9+7取模...原创 2019-07-17 20:43:59 · 442 阅读 · 0 评论 -
bzoj3129: [Sdoi2013]方程(容斥+exlucas)
传送门直接2n12^{n1}2n1枚举前面那些强制不满足条件进行容斥。然后发现答案是一个组合数,然而模数可能是合数。。。于是要用exlucasexlucasexlucas代码:#include<bits/stdc++.h>#define ri register int#define fi first#define se secondusing namespace st...原创 2019-07-31 23:58:45 · 147 阅读 · 0 评论 -
TCO14 CountTables(容斥+第二类斯特林数)
传送门问有多少 n ∗ m 的矩阵,每个数都在 [1, C] 内,任两行不完全相同,任两列不完全相同,n, m, C ≤ 4000。思路:设fif_ifi表示iii行mmm列的答案。再假设当前有nnn行。考虑先满足任意两列都不一样的限制的方案数,显然应该为CcnmC_{c^n}^mCcnm中,然后扣掉有一些行相同的情况。我们把相同的行放到一个集合里面,假设最后有kkk个集合,那么...原创 2019-07-27 16:10:01 · 418 阅读 · 0 评论 -
SRM 498 FoxJumping(dp+容斥)
传送门神题OrzOrzOrz。先预处理出三个dpdpdp数组:fxi,jfx_{i,j}fxi,j表示横向不加限制走iii步走到jjj的方案数。fyi,jfy_{i,j}fyi,j表示纵向不加限制走iii步走到jjj的方案数。fi,jf_{i,j}fi,j表示走iii步每次只能走被限制的步数最终走jjj格方案数。然后就可以xjb容斥就能算出答案。显然可以枚举走几步非法的得出答案...原创 2019-08-05 21:55:18 · 223 阅读 · 0 评论 -
洛谷P4921 情侣?给我烧了!(容斥)
传送门来一发容斥做法。fi,jf_{i,j}fi,j表示iii对位置jjj对人配对成功的方案。然后fn,k=(Cnk)22kk!∑i=0k(−1)i(Cn−ki)2i!2i(2n−2k−2i)!=(Cnk)22kk!g(n,k)=(Cnk)22kk!g(n−1,k−1)\begin{aligned}f_{n,k}=&(C_n^k)^22^kk!\sum\limits_{i=...原创 2019-08-10 19:40:51 · 167 阅读 · 0 评论 -
bzoj4487: [Jsoi2015]染色问题(容斥原理)
传送门题意简述:用ccc中颜色给一个n∗mn*mn∗m的方格染色,每个格子可涂可不涂,问最后每行每列都涂过色且ccc中颜色都出现过的方案数。思路:令fi,j,kf_{i,j,k}fi,j,k表示至少有iii行没涂色,至少有jjj列没涂色,至少有ccc种颜色没涂色的方案数。于是fi,j,k=CniCmjCck(c−k+1)(n−i)(m−j)f_{i,j,k}=C_n^iC_m^jC_...原创 2019-02-09 11:37:53 · 449 阅读 · 0 评论 -
bzoj4710: [Jsoi2011]分特产(容斥原理)
传送门题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤1000)。思路:我们算出fif_ifi表示至少有iii个人没有分到物品的方案数容斥一下即可。于是fi=Cni∏j=1mCn−i−1+ajn−i−1f_i=C_n^i\prod_{j=1}^mC...原创 2019-02-09 11:03:04 · 188 阅读 · 0 评论 -
2018.06.29 NOIP模拟 Gcd(容斥原理)
Gcd 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出n个正整数,放入数组 a 里。 问有多少组方案,使得我从 n 个数里取出一个子集,这个子集的 gcd 不为 1 ,然后我再从剩下的数中取出一个数,把他放进刚刚取出的子集里,使得 gcd 为 1 。 输出方案数 mod (10^9 + 7)。 输入格式 第一行一个数 n 。 第二行 n 个数,表示 a 数组...原创 2018-10-11 23:07:29 · 322 阅读 · 0 评论 -
2018.08.31 bzoj3566: [SHOI2014]概率充电器(概率dp+容斥原理)
传送门 概率dp好题啊。 用f[i]f[i]f[i]表示i自己不亮并且子树中的节点不会让i亮的概率。 用g[i]g[i]g[i]表示i的子树以外的连通块不会使i变亮的概率。 貌似f[i]f[i]f[i]可以直接推出来啊: f[i]=(1−q[i])∗∏v(f[v]+(1−f[v])∗(1−dis[i,v]))f[i]=(1−q[i])∗∏v(f[v]+(1−f[v])∗(1−dis[i,...原创 2018-08-31 20:42:45 · 195 阅读 · 0 评论 -
2018.09.09 bzoj3505: [Cqoi2014]数三角形(容斥原理+简单计数)
传送门 正难则反。 可以直接把问题转化成求出三点共线的情况数量。 如果同在一排或一列显然可以直接算,关键是如何求出斜着的。 我们知道,对于一个整点矩形。 如果长为x,宽为y,那么这个矩形任意一条对角线上有gcd(x,y)个整点。 由于n,m很小,我们直接枚举矩形的边长去掉不合法的情况就行了。 细节有点多。 代码;#include&lt;bits/stdc++.h&gt;#...原创 2018-09-09 13:28:39 · 208 阅读 · 0 评论 -
2018.10.05 bzoj2393: Cirno的完美算数教室(容斥原理+搜索)
传送门经典题目。显然满足题意的数最多不超过1024个。然后对于两个数a,ba,ba,b,如果aaa是bbb的倍数,那么就不必计算aaa的贡献。处理出来之后容斥原理+爆搜剪枝就能过了。代码:#include<bits/stdc++.h>#define ll long longusing namespace std;ll L,R,divv[1050],Div[1050],...原创 2018-10-05 20:37:29 · 255 阅读 · 0 评论 -
2018.10.31 bzoj4737: 组合数问题(lucas定理+容斥原理+数位dp)
传送门这是一道让我重新认识lucaslucaslucas的题。考虑到lucaslucaslucas定理:(nm)≡(n%pm%p)∗(npmp)\binom n m \equiv \binom {n\%p} {m\%p}*\binom{\frac n p}{\frac m p}(mn)≡(m%pn%p)∗(pmpn) (mod(mod(mod p)p)p)所以可以看成(nm)\b...原创 2018-10-31 21:41:54 · 318 阅读 · 0 评论 -
2018.10.30 NOIP模拟 字胡串(单调栈+容斥)
传送门对于每个点,用单调栈求出它左右第一个比他大的位置。然后对每个点O(logai)O(log_{a_i})O(logai)求出第一个拥有跟它不同二进制位的位置。然后容斥一下就行了。代码...原创 2018-10-30 18:44:42 · 242 阅读 · 0 评论 -
2018.11.01 NOIP训练 cost数(搜索+容斥原理)
传送门唉考试的时候忘记剪倍数的枝了666666分滚粗。其实就是一直取lcmlcmlcm搜索,然后容斥原理统计就行了。代码原创 2018-11-01 11:44:58 · 187 阅读 · 0 评论 -
2018.11.18 spoj Triple Sums(容斥原理+fft)
传送门这次fftfftfft乱搞居然没有被卡常?题目简述:给你nnn个数,每三个数ai,aj,ak(i&lt;j&lt;k)a_i,a_j,a_k(i&lt;j&lt;k)ai,aj,ak(i<j<k)组成的所有和以及这些和出现的次数。读完题直接让我联想到了昨天写过的一道用fftfftfft优化点分治合并的题,这不是差不多嘛?只是这一次的...原创 2018-11-18 12:02:17 · 195 阅读 · 0 评论 -
bzoj3771: Triple(生成函数+fft+容斥原理)
传送门生成函数经典题。题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数。思路:令A(x),B(x),C(x)A(x),B(x),C(x)A(x),B(x),C(x)表示选111个,222个,333个的生成函数,ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3...原创 2018-12-31 00:26:25 · 357 阅读 · 0 评论 -
bzoj1853: [Scoi2010]幸运数字(容斥+dfs)
传送门搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了。题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中所有幸运数字及其倍数的个数。思路:先把所有的幸运数字找出来并筛去那些会算重的,剩下一共不超过100010001000个数。即如果满足numi∣numjnum_i|num_jnumi∣numj...原创 2019-01-17 11:05:10 · 254 阅读 · 0 评论 -
bzoj2440: [中山市选2011]完全平方数(二分答案+容斥原理)
传送门题意简述:qqq次询问(q≤500)(q\le500)(q≤500),每次问第kkk个不被除111以外的完全平方数整除的数是多少(k≤1e9)(k\le1e9)(k≤1e9)。思路:考虑二分答案为xxx,然后用容斥原理来解决,ans=n−只有一个质数因子次数大于等于2的个数+只有2个质数因子大于等于2的个数−...ans=n-只有一个质数因子次数大于等于2的个数+只有2个质数因子大于等...原创 2019-02-09 00:15:42 · 232 阅读 · 0 评论 -
bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)
传送门题意简述:有四种面值的硬币,现在qqq次询问(q≤1000)(q\le1000)(q≤1000),每次给出四种硬币的使用上限问最后刚好凑出sss块钱的方案数(s≤100000)(s\le100000)(s≤100000).思路:先跑完全背包预处理出所有硬币都无限制时候的答案。然后每次询问的时候枚举容斥掉多算的情况即可。代码:#include<bits/stdc++.h>...原创 2019-02-09 00:21:31 · 163 阅读 · 0 评论 -
bzoj4455: [Zjoi2016]小星星(容斥原理+dp)
传送门题意简述:给一张图和一棵树(点数都为n≤17n\le17n≤17),问有多少种给树的标号方法方法使得图中去掉多余的边之后和树一模一样。思路:容斥好题啊。考虑fi,jf_{i,j}fi,j表示把iii对应成原图中的点jjj这棵子树的对应方案数。然后转移就枚举儿子看能不能转,如果可以就更新当前答案。但是这样会有多个树中的节点对应到同一个图中的节点上。于是我们用2n2^n2n的...原创 2019-02-09 01:03:48 · 189 阅读 · 0 评论 -
bzoj2839: 集合计数(容斥原理)
传送门题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数。思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk种方案,然后考虑剩下的可选可不选一共有22n−k2^{2^{n-k}}22n−k种选法,但是这样选出来的集合可能有其余的数相交,因此我们容斥掉多余的:ans=Cnk∗∑i=0n−kCni22n−k−ia...原创 2019-02-09 10:36:51 · 319 阅读 · 0 评论 -
洛谷P4931 情侣?给我烧了!(加强版)(容斥)
传送门我们接着这篇题解的思路考虑。gn,0g_{n,0}gn,0到底想表达什么?貌似指的是nnn个人没有一对情侣坐在一起的方案数。emmmmemmmmemmmm,那不就是把两个人绑在一起拿来错排吗?于是我们显然可以O(n)O(n)O(n)预处理这个ggg数组了。先不考虑顺序,每次添加一对情侣,只有一个跟前面的人换,另一个不动⇒gi=(2n−2)(gi−1+gi−2)\Rightarr...原创 2019-08-10 19:52:57 · 164 阅读 · 0 评论