计数类题
文章平均质量分 64
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
P4492 [HAOI2018]苹果树(组合数学+递推)
LINK一颗苹果树长nnn天,第一天长出根节点,每个节点有左右两个分支以后每一天,在这棵树的所有分支处随机选择一个,长出一个新节点定义这个树的不便度为树上两两节点的距离和EEE,输出答案E∗n!E*n!E∗n!对PPP取余求期望EEE,需要知道方案数和所有方案造成的总贡献总方案数是n!n!n!,因为每次加入节点会抹掉一个分支,同时加入两个分支那么所求答案就是总贡献了,因为n!n!n!刚好是总方案数不可能知道树的所有形态,考虑对边单独计算贡献在一颗确定的树中,一条边期望被经过siz[u]∗(原创 2021-03-30 15:12:26 · 260 阅读 · 0 评论 -
牛客练习赛62 C.牛牛染颜色(树型dp)
传送门定义f[u][0/1]f[u][0/1]f[u][0/1]为uuu的子树合法且uuu为白/黑的方案数当uuu为黑色时,只需要保证uuu的子树内部合法即可,因为即使两颗不同子树内有黑点lcalcalca一定是uuu,不过uuu本来就是黑色f[u][1]=f[u][1]∗(f[v][0]+f[v][1])f[u][1]=f[u][1]*(f[v][0]+f[v][1])f[u][1]=f[u][1]∗(f[v][0]+f[v][1])当uuu为白色时,uuu的子树至多有一颗子树存在黑点当没有子原创 2021-02-02 10:10:48 · 236 阅读 · 0 评论 -
牛客练习赛64 D.宝石装箱(容斥+dp)
传送门不会写,完全搬的官方题解,我是fw定义g[k]g[k]g[k]为选出kkk个盒子装不合法的方案数设f[x]=x!f[x]=x!f[x]=x!那么g[k]∗f[n−k]g[k]*f[n-k]g[k]∗f[n−k]就代表至少kkk个盒子不合法的方案数那么使用容斥原理可以得到解如何求g[k]g[k]g[k]?已知第iii个盒子不合法可以把对应的cnt[i]cnt[i]cnt[i]个球装进来而且因为每个球只有一个不合法的盒子,所以不合法盒子内可选择的球是不冲突的也就是枚举第iii个球g[k]原创 2021-02-02 09:50:34 · 241 阅读 · 0 评论 -
牛客小白月赛25 E-tokitsukaze and Segmentation(简单dp)
传送门题意有一个长度为n的字符串,字符串仅包含’0’-‘9’。要把这个字符串切割成若干个子串,每个子串作为一个十进制的数,能被3整除,且不含前导0。问有多少种切割的方案,请输出mod 998244353 后的结果。定义f[i]f[i]f[i]为[1,i][1,i][1,i]的方案数当[1,i][1,i][1,i]的数字和能被三整除时,f[i]f[i]f[i]可以向前转移当ai!=0a_i!=0ai!=0时那么此时,就是f[i]=∑j<i,aj+1!=0f[j]f[i]=\sum\l原创 2020-12-09 23:05:28 · 339 阅读 · 0 评论 -
牛客小白月赛25 B.k-size字符串(组合数学)
nnn个aaa,mmm个bbb分成kkk个连续段,问几种分法考虑nnn个字母aaa排成一排假设两端都是字母aaa那么每插入一段bbb,aaa就加一段设插入了xxx次bbb,有x+x+1=kx+x+1=kx+x+1=k发现当kkk为奇数时有解是k−12\frac{k-1}{2}2k−1段bbb运用插空法有Cn−1k−12C_{n-1}^{\frac{k-1}{2}}Cn−12k−1插入方法而mmm个字母分成k−12\frac{k-1}{2}2k−1段有Cm−1k−12−1C_{m-.原创 2020-12-09 22:42:44 · 839 阅读 · 0 评论 -
「Bzoj3771]Triple(FFT容斥)
bzojbzojbzoj崩了,没有题目链接.首先设a,b,ca,b,ca,b,c都是一个010101序列设有数字为xxx,那么令ax=1a_x=1ax=1,b2x=1,c3x=1b_{2x}=1,c_{3x}=1b2x=1,c3x=1分别代表一个数,两个相同数,三个相同数组成kkk的方案Ⅰ.选一个数的方案\color{Red}Ⅰ.选一个数的方案Ⅰ.选一个数的方案就是aaa数组,没什么好说的Ⅱ.选两个数的方案\color{Red}Ⅱ.选两个数的方案Ⅱ.选两个数的方案对aaa数组做自卷积得到原创 2020-12-08 09:36:09 · 219 阅读 · 0 评论 -
Prime XOR HackerRank - prime-xor(简单压缩dp)
传送门给定NNN个数,求有多少个不同子集的异或和为质数其中N≤105,3500≤ai≤4500N≤10^5,3500≤a_i≤4500N≤105,3500≤ai≤4500数的异或和不会超过900090009000假如数据范围小一点可以定义f[i][j]f[i][j]f[i][j]为前iii个数构成异或和为jjj的方案数但这样TTT上天但是发现nnn很大但aia_iai的取值很小,于是可以只枚举数的范围复杂度就非常低了那么每个数只有取奇数和偶数的区别…#include <bits/原创 2020-12-07 22:48:54 · 373 阅读 · 0 评论 -
451E E. Devu and Flowers(隔板法+dfs容斥法)
传送门题意:有n(n<=20)种花,每种花的数量fi(<=1e12)已知,现在要取si(si<=1e14)朵,求方案。若nnn种花无限制,可以利用隔板法得到答案为(S+n−1n−1){S+n-1 \choose n-1}(n−1S+n−1)但是现在有限制,那么每一组都可能会超过限制于是可以开始dfsdfsdfs枚举哪几种花超出了限制比如枚举了第iii种花为fif_ifi,那么直接让S−fi−1S-f_i-1S−fi−1然后就是偶加奇减容斥#include <原创 2020-12-07 22:02:09 · 266 阅读 · 0 评论 -
P2012 拯救世界2(OGF)
传送门若不限定出现次数,那么有ex=1+x1!+x22!+x33!....e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}....ex=1+1!x+2!x2+3!x3....乾、坎、艮、震只能出现奇数次坤、兑、离、巽只能出现偶数次偶数次好办,因为我们知道e−x=1−x1!+x22!−x33!.......e^{-x}=1-\frac{x}{1!}+\frac{x^2}{2!}-\frac{x^3}{3!}.......e−x=1−1!x+2原创 2020-12-07 12:08:04 · 274 阅读 · 0 评论 -
P2000 拯救世界(生成函数裸题+NTT高精)
传送门题意kkksc03 大神召唤方法:金神石的块数必须是 6 的倍数。木神石最多用 9 块。水神石最多用 5 块。火神石的块数必须是 4 的倍数。土神石最多用 7 块。lzn 大神召唤方法:金神石的块数必须是 2 的倍数。木神石最多用 1 块。水神石的块数必须是 8 的倍数。火神石的块数必须是 10 的倍数。土神石最多用 3 块。有多少种大阵对,前一个能召唤kkk,后一个能召唤lzn”定理11−x=1+x+x2+x3+x4.......\frac{1}{1-x}=1+x+原创 2020-12-06 16:16:54 · 1685 阅读 · 1 评论 -
HDU 1085 Holding Bin-Laden Captive!(生成函数入门)
传送门生成函数的水题…货币面值111的生成函数为1+x+x2+x3+x4...1+x+x^2+x^3+x^4...1+x+x2+x3+x4...货币面值222的生成函数为1+x2+x4+x6...1+x^2+x^4+x^6...1+x2+x4+x6...货币面值555的生成函数为1+x5+x10....1+x^5+x^{10}....1+x5+x10....三个多项式乘起来,xix^ixi的系数就是凑成iii的方案数,跑了183ms183ms183ms#include <bits/stdc原创 2020-12-05 20:55:05 · 283 阅读 · 0 评论 -
HDU1028 Ignatius and the Princess III(生成函数)
传送门给定数字nnn,可以把它拆分为多少种a+b+c....a+b+c....a+b+c....的形式。这是很经典的整数拆分问题设数kkk的生成函数为1+xk+x2k+x3k.......1+x^k+x^{2k}+x^{3k}.......1+xk+x2k+x3k.......把[1,n][1,n][1,n]所有的生成函数乘起来,得到的xnx^nxn的系数就是答案了…最朴素的暴力乘用时46ms46ms46ms#include <bits/stdc++.h>using names原创 2020-12-05 19:54:33 · 420 阅读 · 0 评论 -
这可能是最通俗最详细的生成函数讲解了吧!!!
初识生成函数生成函数是一个关于xxx的多项式,用于表示一个数列.比如一个数列sss=1,2,3,4,5,6,7…那么sss对应的生成函数就是1+2x+3x3+4x4+5x5...1+2x+3x^3+4x^4+5x^5...1+2x+3x3+4x4+5x5...生成函数有什么用??举个讲生成函数都会提到的经典例子.物品AAA有222个,物品BBB有222个,物品CCC有333个取出kkk个物品有多少种取法?这种问题一般可用背包解,但其实背包也是在模仿很像生成函数.物品AAA的生成函数是1原创 2020-12-05 19:33:52 · 3453 阅读 · 21 评论 -
小球遇上盒子的八种模型
现在有nnn个球,mmm个盒子Ⅰ.球同,盒不同,无空箱\color{Red}Ⅰ.球同,盒不同,无空箱Ⅰ.球同,盒不同,无空箱那么nnn个球形成了n−1n-1n−1个间隙,于是可以用m−1m-1m−1个隔板分成mmm组方案数是Cn−1m−1C_{n-1}^{m-1}Cn−1m−1,其中n>=mn>=mn>=mⅡ.球同,盒不同,允许空箱\color{Red}Ⅱ.球同,盒不同,允许空箱Ⅱ.球同,盒不同,允许空箱相当于多加mmm个球预先给mmm个盒子每个放一个,这样保证了无空箱于是现原创 2020-12-05 13:46:59 · 1157 阅读 · 0 评论 -
P3223 [HNOI2012]排队(高中排列组合)
传送门题意nnn个男生,mmm个女生,222个老师排队女生和女生不能相邻,老师和老师不能相邻,问方案数.考虑到老师只有两个,所以可以对老师来讨论.Ⅰ.\color{Red}Ⅰ.Ⅰ.两只老师间没有男生那么两个老师和中间那个女生看成一个整体运用捆绑法,Cm1C_m^1Cm1是从女生选一个放在老师中间AnnAn+11A22∗An+2m−1∗Cm1A_n^nA_{n+1}^1A_2^2*A_{n+2}^{m-1}*C_m^1AnnAn+11A22∗An+2m−1∗Cm1Ⅱ.\color原创 2020-12-05 11:34:40 · 398 阅读 · 0 评论 -
P3244 [HNOI2015]落忆枫音(DAG上的生成树个数+记忆化)
传送门一个DAGDAGDAG的生成树个数很容易算,就是给每个点选一个父亲(1为根)(1为根)(1为根)∏i=2nin[i]\prod\limits_{i=2}^nin[i]i=2∏nin[i]现在新增一条sss到ttt的边,原来的选择方案可能就会成环而且必定包括sss到ttt这条边假设图中一个环 a1 a2...ak\ a_1\ a_2...a_k a1 a2...ak包括这个环的方案数有多少呢??其实就是固定这个环中所有点的父亲,其余点任意∏原创 2020-12-04 17:02:05 · 327 阅读 · 0 评论 -
P3214 [HNOI2011]卡农(精妙的容斥dp)
传送门从[1,n][1,n][1,n]选出mmm个互不相同的子集Ⅰ.mⅠ.mⅠ.m个元素互不相同Ⅱ.mⅡ.mⅡ.m个元素不能为空Ⅲ.Ⅲ.Ⅲ.每个数字出现偶数次定义f[i]f[i]f[i]为前iii个子集的合法方案若不考虑第三个条件,方案数是A2n−1mA_{2^n-1}^mA2n−1m但是确定了前m−1m-1m−1个子集,就确定了第mmm个子集,所以是A2n−1m−1A_{2^n-1}^{m-1}A2n−1m−1但是当第mmm个子集为空,需要减去前m−1m-1m−1个元素合法的方案那么原创 2020-12-04 15:16:13 · 244 阅读 · 0 评论 -
P2606 [ZJOI2010]排列计数(模型转化:树型dp组合计数)
传送门题意一个1−n1-n1−n的排列是magicmagicmagic的,当且仅当对于所有的i (i∈[1,n])i\ \ \ (i\in[1,n])i (i∈[1,n])满足ai>ai/2a_i>a_{i/2}ai>ai/2问有多少个排列是magicmagicmagic的分析一下,发现也就是a2>a1,a3>a1a_2>a_1,a_3>a_1a2>a1,a3>a原创 2020-12-04 15:04:20 · 231 阅读 · 0 评论 -
P5664 Emiya 家今天的饭(巧妙的容斥dp+优化)
传送门非常巧妙的一题呢在题面啰嗦了一大堆后,我们发现Ⅰ.Ⅰ.Ⅰ.需要做kkk道菜(k>=1)(k>=1)(k>=1)Ⅱ.Ⅱ.Ⅱ.每一行只能选择一道菜(保证烹饪方法互不相同)Ⅲ.Ⅲ.Ⅲ.每一列选的菜不能大于∣k2∣|\frac{k}{2}|∣2k∣苦思冥想后居然还是没有头绪如果dpdpdp的话需要储存每一列选了几道菜,这显然是不现实的.那么正难则反,考虑容斥答案是(对列不做限制的方案)-(某一列大于∣k2∣|\frac{k}{2}|∣2k∣的方案)第一部分:求某一列大原创 2020-12-03 23:15:55 · 265 阅读 · 0 评论 -
P3702 [SDOI2017]序列计数(矩阵快速幂或普通快速幂)
传送门首先容易想到容斥先算用任意数满足条件,再算只用和数满足条件相减就是答案.令f[i][j]f[i][j]f[i][j]表示前iii个数模ppp为jjj的方案数预处理一个数组v[i]v[i]v[i]表示小于mmm的数中对ppp求余为iii的个数那么f[i][j]=∑kf[i−1][k]∗v[(j+p−k)%p]f[i][j]=\sum\limits_kf[i-1][k]*v[(j+p-k)\%p]f[i][j]=k∑f[i−1][k]∗v[(j+p−k)%p]那么发现每个转移都一样,可以用原创 2020-12-03 13:46:54 · 235 阅读 · 0 评论 -
P1350 车的放置(分段组合数计算)
传送门将图形分成上下两部分枚举上面放的车xxx个那么上面的方案是Cbx∗AaxC_b^x*A_a^xCbx∗Aax下面对于行的选取还是Cdk−xC_{d}^{k-x}Cdk−x但是列的选取本来是a+ba+ba+b,现在只有a+b−ia+b-ia+b−i那么排列一下下面的方案就是Cdk−x∗Aa+c−xk−xC_d^{k-x}*A_{a+c-x}^{k-x}Cdk−x∗Aa+c−xk−x#include <bits/stdc++.h>using namespace std原创 2020-12-03 10:50:56 · 290 阅读 · 0 评论 -
P4071 [SDOI2016]排列计数(错排问题)
传送门题意求有多少种排列,满足恰好mmm个位置满足a[i]==ia[i]==ia[i]==i首先CnmC_n^mCnm选出mmm个位置放置满足要求问题变成n−mn-mn−m个数字,第iii个位置不能放iii错排问题考虑第nnn个位置放着数字kkk,其中kkk有n−1n-1n−1种取值Ⅰ.Ⅰ.Ⅰ.当第kkk个位置放数字nnn,就变成了n−2n-2n−2个位置的错排问题了Ⅱ.Ⅱ.Ⅱ.当第kkk个位置不放数字nnn时可用的位置为1,2...n−11,2...n-11,2...n−1可用的数字原创 2020-12-02 23:31:17 · 516 阅读 · 0 评论 -
P6075 [JSOI2015]子集选取(高思维...结论题)
传送门这也太难想了吧…只是一道绿题…对于集合元素的子集概念,需要特别注意不同的元素互相不影响,可以分开单独考虑因为如果某个地方有元素xxx,说明左边和上面也一定有xxx,对这个元素来说没有其他限制这样的话,只需要考虑当只有一个元素的情况,然后答案nnn次方即可那么当n=1n=1n=1时,对于一个三角形从左下角出发,制造一条010101的分割线,每一步可以往上可以往右,就是2k2^k2k答案是2nk2^{nk}2nk#include <bits/stdc++.h>using n原创 2020-12-02 19:47:59 · 239 阅读 · 0 评论 -
P6146 [USACO20FEB]Help Yourself G(思维线段树或计数dp)
传送门给定nnn条线段对于这nnn条线段的所有子集的复杂度求和[xxx条线段形成的复杂度是:这xxx条线段形成的连通块个数]考虑单独一条线段aaa的贡献如果选的子集中没有线段和aaa相交,贡献毫无疑问是111若有kkk条线段和aaa相交,所有的kkk条贡献是111这样非常不好计算,所以我们规定如果多条线段相交,贡献是左端点最左的线段那么可以得到,如果aaa对答案有贡献不会存在一条直线满足li<la<ril_i<l_a<r_ili<la<ri,其余原创 2020-12-02 19:20:03 · 272 阅读 · 0 评论