计数
LowestJN
强省弱OIer
展开
-
[计数][容斥] 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 · 1179 阅读 · 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 · 700 阅读 · 1 评论 -
[DP] Atcoder AGC013D. Piling Up
假设刚开始有 xx 个红色, n−xn-x 个蓝色一个合法的数列有多个初始的 xx 值,对于最小的 xx 值,在操作的过程中,xx 会变成0那么 fi,j,0..1f_{i,j,0..1} 表示操作了 ii 次,当前 x=jx=j ,xx 是否变成过0答案就是 ∑fm,i,1\sum f_{m,i,1}这样就可以不重复了#include <cstdio> #include <iostream> #i原创 2017-10-28 15:05:47 · 652 阅读 · 0 评论 -
[数位DP 多重背包计数] BZOJ5003. 与链
每一位二进制分开考虑那么在一个合法的序列中,一定是前面几个数当前二进制位是1,其他都是0数位DP,每一位的1最多出现k次,这就是一个多重背包多重背包转移用前缀和优化就好了O(nlogn)O(n\log n)#include <cstdio> #include <iostream> #include <algorithm>using namespace std;const int N=100010,P原创 2017-11-26 11:02:49 · 575 阅读 · 0 评论 -
[计数 DP]Atcoder AGC001 E. BBQ Hard
答案是求 ∑i≠j(ai+aj+bi+bjai+aj)\sum_{i\neq j}{a_i+a_j+b_i+b_j\choose a_i+a_j}这就相当于从平面内的 (−ai,−bi)(-a_i,-b_i) 走到 (aj,bj)(a_j,b_j) 的方案数把点放到平面上,DP就好了#include <cstdio> #include <iostream> #include <algorithm>原创 2017-12-06 20:47:43 · 450 阅读 · 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 · 280 阅读 · 0 评论 -
[状压DP || 容斥 矩阵树定理] Codeforces 53E. Dead Ends
容斥练习题这题状压DP的做法跟今年NOIP那题状压一样简单——vectorxj也可以容斥 枚举叶子的集合 SS,算出非叶子的点的导出子图的生成树个数,再乘上每个叶子和这些点的边的数量 这样可以算出 fif_i,至少有 ii 个叶子的方案数然后就跟一般容斥一样 gi=fi−∑j=i+1n(ji)gj g_i=f_i-\sum_{j=i+1}^n{j\choose i}g_j #include <原创 2018-01-04 11:52:50 · 548 阅读 · 0 评论 -
[补集转换] Topcoder SRM563 DIV1. CoinsGame
枚举两个点,如果经过一系列操作使得一个留在棋盘上一个不在,那么这个点对是有价值的 那么合法的放棋子的方案一定包含至少一个有价值的点对 但是点对个数是 O((nm)2)O((nm)2)O((nm)^2) 的,直接容斥不行 补集转化一下,可以发现如果点对 (a,b)(a,b)(a,b) 和点对 (b,c)(b,c)(b,c) 是没有价值的,那么点对 (a,c)(a,c)(a,c) 也是没有价值的...原创 2018-03-24 13:58:12 · 741 阅读 · 0 评论