
容斥原理
LowestJN
强省弱OIer
展开
-
[BZOJ3771][生成函数][FFT][容斥原理]Triple
题意给定n个数,求从其中选1个、2个、3个能得到的权值和的情况及方案数生成函数裸题 刚接触这玩意并不是很能理解,也不是很懂怎么表达……考虑f(i)f(i)表示权值和为i的方案数,那么有f(i)=∑f(j)∗f(i−j)f(i)=\sum f(j)*f({i-j}),为卷积形式, 那么令母函数g(x)=∑aixig(x)=\sum a_ix^i的第m项系数为权值和为m的方案数,就可以用FFT优化多原创 2017-02-21 20:38:34 · 673 阅读 · 0 评论 -
[容斥 状压DP] HDU4997. Biconnected
令 fSf_S 表示点集 SS 的答案,gSg_S 表示点集 SS 的连通图个数那么 gSg_S 可以通过枚举与编号最小的点联通的点集求出来fS=gS−∑T∈SgT×MT,S−Tf_S=g_S-\sum_{T\in S}g_T\times M_{T,S-T},MS,TM_{S,T} 表示把点集 SS 分成几个联通块后连到 TT 上的方案数#include <cstdio>#include <ios原创 2017-12-26 21:20:45 · 510 阅读 · 0 评论 -
[矩阵树定理 容斥 meet in middle] Topcoder SRM 551 DIV1 Hard. SweetFruits
枚举最后的树中有多少个是truly sweet的 答案就是 ∑i=0nfi×gi\sum_{i=0}^n f_i\times g_i其中,fif_i 表示选出 ii 个水果使其价值和不超过Limit的方案数 gig_i 是有 ii 个truly sweet的生成树个数fif_i 可以meet in middle 设图中前 ii 个点是truly sweet, i+1i+1 到 kk 是s原创 2018-01-03 15:21:00 · 633 阅读 · 0 评论 -
[容斥 & 状压DP & FFT] Tco 2016 Final. HamiltonianPaths
相当于是问有多少种排列,使得相邻的点之间没有边 考虑容斥 一张图中选了 dd 条边,那么会形成 n−dn-d 条链,设所有图中的链总共有 xx 条,那么答案乘上 x!x! 只要DP出形成 aa 条链的方案数,然后NTT一下就可以了// BEGIN CUT HERE // END CUT HERE #include <vector> #include <list> #include原创 2018-01-03 18:37:11 · 408 阅读 · 0 评论 -
[容斥 DP] Topcoder SRM 498 DIV1 Hard. FoxJumping
容斥 令 fi,jf_{i,j} 表示走了 ii 步不合法的,x和y都走了 jj 的方案数 li,jl_{i,j},ri,jr_{i,j} 分别表示在x,y方向上随便走了 ii 步,走了 jj 的方案数那么答案是 ∑d=0R(−1)d(Rd)∑i=0nfd,i×lR−d,n−i×rR−d,m−i\sum_{d=0}^R(-1)^d{R\choose d}\sum_{i=0}^nf_{d,i}原创 2018-01-04 10:42:05 · 539 阅读 · 0 评论 -
[状压DP || 容斥 矩阵树定理] Codeforces 53E. Dead Ends
容斥练习题这题状压DP的做法跟今年NOIP那题状压一样简单——vectorxj也可以容斥 枚举叶子的集合 SS,算出非叶子的点的导出子图的生成树个数,再乘上每个叶子和这些点的边的数量 这样可以算出 fif_i,至少有 ii 个叶子的方案数然后就跟一般容斥一样 gi=fi−∑j=i+1n(ji)gjg_i=f_i-\sum_{j=i+1}^n{j\choose i}g_j#include <原创 2018-01-04 11:52:50 · 567 阅读 · 0 评论 -
[容斥DP & 高精度] BZOJ2024 [SHOI2009] 舞会
男女生按升高排序 令 fi,jf_{i,j} 表示前 ii 个女生中有 jj 个比男生高(其他 i−ji-j 个不确定)的方案数DP出来了容斥一下就可以了#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=210;const int原创 2018-01-04 14:19:07 · 453 阅读 · 0 评论 -
[容斥] Topcoder SRM555DIV1. MapGuessing
经典题了枚举初始状态的磁头位置,求出哪些位置可以随意改动,然后大力容斥#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <cstring>using namespace std;typedef lo...原创 2018-03-08 07:53:42 · 461 阅读 · 0 评论 -
[容斥 状压DP] Atcoder ARC093 F - Dark Horse
wwwww比赛的时候题目看错了假设我们确定的1的位置,那么接下来的每一轮,1都会和一段长度为2的幂的区间里,标号最小的人pk。把1固定在1位置(求出最终方案数后乘上 2n2n2^n 就是答案),那么就相当于区间 [2,2][2,2][2,2],[3,4][3,4][3,4],[5,8][5,8][5,8]…[2n−1+1,2n][2n−1+1,2n][2^{n-1}+1,2^n] 里的最小...原创 2018-03-26 08:32:51 · 778 阅读 · 0 评论 -
[容斥 NTT] LOJ#2541. 「PKUWC 2018」猎人杀
很妙的题这题其实如果不考虑攻击的限制,也就是不管猎人死没死,他都能被当作攻击的目标,一个猎人被攻击到的概率是一样的。设 A=∑wiA=∑wiA=\sum w_i , BBB 为以及死的猎人的 wiwiw_i 的和,设 PiPiP_i 为 iii 是下一个被杀死的概率(iii 之前还活着)那么 Pi=wiA−BPi=wiA−BP_i={w_i\over A-B},如果不考虑攻击的限制,...原创 2018-05-13 10:39:01 · 1722 阅读 · 0 评论 -
[容斥] Hihocoder Challenge 32 .B Rikka with String II
字典树实际上就是把前缀给缩起来如果只有两个串,那么答案就是两个串的长度和减去LCP这就是个容斥的形式,答案就是 2?的数量+∑S∈U(−1)|S|+1LCP(S)2^\text{?的数量}+\sum_{S\in U} (-1)^{|S|+1}LCP(S)前面的 2?的数量2^\text{?的数量} 是根节点LCP的话,枚举一下每一位,判断一下就可以了hihocoder跑得好快啊,竟然没被卡常#inc原创 2017-12-05 20:44:12 · 295 阅读 · 0 评论 -
[容斥 DP] LOJ#6077. 「2017 山东一轮集训 Day7」逆序对
考虑从小到大加入一个数,加入 ii 时会增加大于0小于 ii 对逆序对那么就相当于求 ∑ai=k\sum a_{i} = k 的方案数,其中 ai<ia_i<i这就是个很经典的背包了——BZOJ2431但是这题不能用背包来做考虑容斥。朴素的容斥要枚举哪些超过限制,这样复杂度是指数级别的,但是很多是有重复的令 fi,jf_{i,j} 表示用 ii 个数组成 jj 的方案数gi=∑fi,j×(n+k−j原创 2017-10-16 15:23:01 · 1087 阅读 · 0 评论 -
[BZOJ2669][cqoi2012][状压DP][容斥原理]局部极小值
去年暑假就见过这道题,觉得太难就扔到一边,这几天上课讲到就填上这个坑考虑状压DP,因为普通DP出来的方案数中会存在局部最小值大于给定数量的情况,所以要dfs出所有情况然后容斥#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#define mod 123456原创 2017-02-21 20:53:32 · 645 阅读 · 0 评论 -
[BZOJ Contest-2017省队十连测推广赛1·T3][BZOJ4767][DP][容斥原理]两双手
这题跟BZOJ3782 上学路径思路一样。 但是这道题的图不是网格图,这个时候就要重建一下图,首先我们发现,从起点走到一个点用的A走法和B走法的次数是固定的,假设A走法用了x次,B走法用了y次,那么可以列一个方程组: {Ax∗x+Bx∗y=xiAy∗x+By∗y=yi\left\{\begin{array}{c}Ax*x+Bx*y=x_i\\Ay*x+By*y=y_i\end{arr原创 2017-03-07 20:26:14 · 1208 阅读 · 0 评论 -
[BZOJ4818][Sdoi2017][容斥原理][矩阵优化DP]序列计数
考虑容斥原理 Ans=f满足和为p的倍数−f满足和为p的倍数求不含质数Ans=f_{满足和为p的倍数}-f_{满足和为p的倍数求不含质数} 可以DP,f(i,j)f(i,j)表示转移到第i位,前i位和模P等于j的方案数那么显然f(i,j)=∑f(i−1,k)∗cnt(j−k+p)modpf(i,j)=\sum f(i-1,k)*cnt_{(j-k+p)\mod p}其中cnticnt_i表示1~原创 2017-04-20 21:28:43 · 1101 阅读 · 0 评论 -
[AtCoder AGC005 D][容斥][DP] ~K Perm Counting
既然APIO讲到了,就补一发计数题题意是求有多少个n的排列,满足对于任意ii,|a[i]−i|≠k|a[i]-i|\neq k,kk是给定整数陈老师说的简单DP不会啊…只好求助Manchery另fif_i表示恰好有ii个xx满足|a[x]−x|=k|a[x]-x|=k,答案就是∑ni=0fi(n−i)!(−1)i\sum_{i=0}^n f_i(n-i)!(-1)^i——摘自官方题解 官方也没给出原创 2017-05-14 08:37:39 · 1222 阅读 · 0 评论 -
[计数][容斥] LOJ#6065 || BZOJ4927 && 2017 山东一轮集训 Day3. 第一题
因为要选6根木棒,发现肯定是1,1,2,2或1,1,1,3形式。 可以枚举2和3的部分,然后推一推,容斥容斥就可以了 但是细节贼多#include <cstdio>#include <iostream>#include <algorithm>#include <vector>using namespace std;const int N=5010,MAX=1e7;typedef long原创 2017-07-11 17:48:12 · 1191 阅读 · 0 评论 -
[LOJ#6160][美团 CodeM 初赛 Round A][容斥][递推]二分图染色
题解#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N=1e7+10,P=1e9+7;int n,f[N],fac[N],inv[N];inline ll C(int x,int y){ return 1LL*fac[x]*in原创 2017-07-06 20:22:46 · 671 阅读 · 0 评论 -
[容斥][排列组合] BZOJ4710 && Jsoi2011.分特产
把M个物品分给N个人的方案数,可以用插板法得到,为(M+N−1N−1)M+N-1\choose N-1 不考虑每个人至少分到一个,这些特产的总方案数为∏(Ai+N−1N−1)\prod {A_i+N-1\choose N-1} 发现每个人至少分到一个这个限制很麻烦,反过来的话就比较好做,容斥就可以了#include <cstdio>#include <iostream>#include <a原创 2017-08-10 16:14:44 · 440 阅读 · 0 评论 -
[计数 补集转换][阈值] Codechef SEAARC.Sereja and Arcs
传送门 %%%度神 很强的计数题 题目就是求形如ABAB的个数,发现这个很难求,补集转换一下,答案就是总数减去AABB和ABBA的个数 求总数很简单,就是∏i=1n(ai2)\prod_{i=1}^n{a_i\choose 2}aia_i是第i中颜色个数 AABB的个数可以枚举p,然后用颜色的前后缀和求出来。 重点就是求ABBA了 直接求还是不好求,可以设一个阈值 SS BigBig原创 2017-08-15 15:45:22 · 717 阅读 · 1 评论 -
[容斥] Topcoder SRM div1-3 12004. SetAndSet
把所有数取反,转换成分成两个集合,集合或值相同。容斥一下每次枚举哪些位不满足条件,用并查集维护一下要在同一个集合的联通块就好了#include <cstdio> #include <iostream>#include <algorithm>#include <vector>#include <cstring>using namespace std;class SetAndSet{原创 2017-10-31 17:19:05 · 912 阅读 · 0 评论 -
[Min-Max 容斥] LOJ#2542. 「PKUWC 2018」随机游走
这题我原来使用 O(2nn3)O(2nn3)O(2^n n^3) 暴力过的…跑的还贼快可以用Min-Max 容斥设 Max(S)Max(S)Max(S) 表示集合里最晚被访问的节点被访问的期望步数(也就是访问所有节点的期望步数)。设 Min(S)Min(S)Min(S) 表示集合里最早被访问的节点被访问的期望步数(也就是第一次访问到集合里的节点的期望步数)那么 Max(S)=∑T∈...原创 2018-05-24 18:29:11 · 1544 阅读 · 0 评论