20240813:组合计数选做

P3214 [HNOI2011] 卡农#

题意:m 个集合,n 种元素,求集合间互不相同且每种元素出现偶数次的方案数。

题目等价于从 12n1 里选出 m 个不同的数,使他们异或和为 0

不妨对每个数标号,由于互不相同,最后除以 m! 即可。

fi 表示前 i 个数异或和为 0 的合法方案数。

显然 ai=j=1i1aj,对于前 i1 个数的每种选法都唯一对应一个 ai,即 fi(2n1)i1

非法方案有两种:

  • ai=0。等价于 j=1i1aj=0,即 fi1

  • ai 等于某个 aj (j<i)

    也就是剩下的 i2 个人异或和为 0,对应 fi2

    枚举 j 的位置和 aj 是哪个,乘上 (i1)×(2ni+1) 的系数。

评黑确实不够格(好的他蓝了)。submission

P3330 [ZJOI2011] 看电影#

题意:

n 个人 k 个座位,每个人初始随机被分配一个座位 i,如果 i 上有人就去 i+1 直到 k,如果 k 也有人这个人只能站着。

求每个人都有座位的概率。

特判 n<k 概率为 0

我们在 k 后面新增一个位置 k+1,并与位置 1 相连形成一个 k+1 的环。

不给环标号,不同的方案为 (k+1)n1

由于 n<k+1,所以任意一种方案在环上走都能使所有人都有位置。

在最终状态里,找到一个没有人的位置当做 k+1,并由此断开,钦定方向标为 1k,对应一种合法情况。

因此一种方案能生成 k+1n 个不同的序列。

由于我们可以序列还原到 k+1 的环,因此不存在不同的环生成同一序列。

答案等于

(k+1)n1×(k+1n)kn

题目要求输出分数,由于 kk+1,因此只需考虑 kk+1n 的公因数,不需要高精除。

submission

P6620 [省选联考 2020 A 卷] 组合数问题#

题意:给定 f(k)=a0+a1k+amkm,求

k=0nf(k)×xk×(nk)

其中 n109,mmin(n,1000)

=k=0ni=0maiki×xk×(nk)=i=0maik=0nj=0i{ij}kjxk(nk)=i=0maij=0ik=jn{ij}kjxknj(nj)!kj(kj)!(nk)!=i=0maij=0i{ij}njxjk=jnxkj(njkj)=i=0maij=0i{ij}njxj(x+1)nj 

里面所有东西都能预处理,O(m2) 直接算。

submission

P3160 [CQOI2012] 局部极小值#

题意:

n×m 的矩阵,1n×m 每个数恰好出现一次,n4,m7

如果一个格子是他的八联通里的最小值,则称这个位置为局部最小值。

给定 n×m 的网格,x 表示局部最小值,. 表示非局部最小值,求符合条件的矩阵数量。

局部最小值的数量很少,4×7 的网格最多 8 个。

从小到大填数。

f(i,s) 表示当前在填 i,局部最小值的状态为 s(有没有填过)的合法方案。

我们发现一个局部最小值没填的时候他周围都不能填。

i 填局部最小值 xf(i,sx)f(i1,s)

i 不填局部最小值:f(i,s)f(i1,s)×(cnts(i1|s|))

其中 cnts 表示状态为 s 时可填的非局部最小值。

单次 dp 复杂度 O(28nm)

但是这样只满足了 x 的位置是局部最小值,并没有保证 . 的位置不是局部最小值。

性质 ai 表示 i 这个位置是局部最小值,N(ai) 表示满足这个条件的方案数。

上述 dp 可以求出任意 N(ai)

令所有局部最小值的集合为 S,则答案可以表示为

N(iSaiiS(1ai))

把后面的多项式展开成容斥形式:

TUS(1)|T|×N(iSTai)

合法状态很少,直接深搜枚举所有的 T

submission

P3270 [JLOI2016] 成绩比较#

题意:n 个人 m 门课,ij 碾压定义为每门分数都不超过 j

所有人第 i 门课的成绩在 1Ui 之间。

给出其中 B 每门课的排名 ri(分数严格大于他的人数 +1),求他恰好碾压 k 个人的情况数。

先选出 k 个人被 B 碾压,方案数为 (n1k)

剩下的 nk1 个人都必须满足至少一门课的分数大于 B。

很容易求出至多 x 个人不被 B 碾压的方案 (nk1x)(xri1)

那么恰好 nk1 个人不被碾压的方案减还要减去恰好 0,1,,nk2 个人的方案。

直接递推或者容斥都能解决。

接下来要分配每个人的成绩,每门课相互独立,最后相乘即可。

枚举 B 的分数:

i=1mx=1Uixnri(Uix)ri1=i=1mx=1Uixnrij=0ri1(ri1j)(1)jxj×Uirij1=i=1mj=0ri1(1)j(ri1j)Uirij1x=1Uixn+jri

后面那个东西直接插出来。时间复杂度 O(n2m)

对于 n 次多项式 f(x),如果已知他的 n+1 个点值 (xi,yi),则

f(x)=i=1n+1yijixxjxixj

f(x)=i=1xit 是关于 xt+1 次多项式。

xi=i (it+2),预处理可以做到 O(t) 求值。

submission

P7213 [JOISC2020] 最古の遺跡 3#

题意:2n 个柱子,1n 种高度每个出现两次。

n 次地震,每次地震使 hihi1,当且仅当 i 后面有一根相同高度的柱子。

给定地震过后仅存的 n 个位置 A1,A2,,An,求初始高度序列的方案数。

从后往前挨个震 n 次和上述操作是等效的。

考虑一个位置 ii 后面的高度集合一定只增不减(指集合元素)。

相同高度的柱子中位置最靠后的一定会被保留,也就是一种高度一旦出现不会消失。

由于 i 对后面的柱子没有影响,因此无论是全部震完之后 hi 再减小还是和后面的柱子同步减小都是等效的。

任意时刻最多两个柱子高度相同,如果 t 时刻 hi=hj=hk,则 t1 时刻也存在 hi=hj=hk,这与 t=0 时矛盾。

不难发现在第 i 次操作后 1ni 每个数出现两次,ni+1n 每个数出现一次,可以借助上条结论归纳。

也就是每次的两个 1 总有一个会变成 0

因此震 n 次和震无数次是一样的,且 n 次过后 1n 各剩一个。

hi 会消失,当且仅当最终序列的后缀 i+1 里出现 1hi 的每个元素。

定义 hi 为当前序列的高度阈值(极大),所有 h[1,hi] 都会消失,反之保留。

fi,j 表示后缀 i 高度阈值为 j 的方案数。

c0 表示后 i1 个柱子中钦定消失的数量,c1 为钦定存在的数量。

不妨先区分相同高度的两根柱子,最后除以 2n

  • i 位置钦定消失,阈值不变。

    2j 种可用高度里,有 j 个分给 j标准柱(即被保留的 1j),还有 c0 个已经分配,那么 fi,j(jc0)×fi1,j

  • i 位置钦定保留。

    hi 表示当前柱子的最终高度。

    如果 hi>j+1,则高度阈值不变,fi,jfi1,j,后续再考虑其真实高度。

    如果 hi=j+1,那么就需要确定前面遗留的 h>j+1 的真实高度。

    枚举新阈值 k,从 fi1,j 转移到 fi,k

    确定转移系数。

    选定标准柱的位置:(c1jkj1)

    当前柱子的初始高度(最后降到 j+1):kj+1(高度只能在 [j+1,k],标准柱 [j+2,k] 各用一根)。

    确定 j+2k 是如何生成的:gkj1

    gi 表示 2i 个数(123344...ii)中选出 i 个,并在地震后能形成 1i 的方案数(对应上文从 [j+2,k] 各两根,震出 j+2k)。

    类似 f 的转移,我们枚举第一个位置的最终高度 j

    gi=j=1i(i1j1)(ij+2)×gj1×gnj

    选高度为 [1,j1] 会被震成 0,剩下 [j+1,n] 的柱子各被用掉一根,因此第一个位置有 (ij+2) 种选择。

submission

【清华集训2014】主旋律#

P2595 [ZJOI2009] 多米诺骨牌#

弃疗。

P4451 [国家集训队] 整数的lqp拆分#

题意:1n10100000,求

a1+a2++am=ni=1mfai

其中 f0=0,f1=1,fi=fi1+fi2

构造形式幂集数 F(x)=i0fixi=x1xx2

m 恰好等于 k 的答案为 [xn]F(x)k

那么答案的生成函数等于 G(x)=k1F(x)k

G(x)=F(x)+F(x)2+=F(x)+F(x)G(x)G(x)=x12xx2=x(c1ax+d1bx)=i1(cai1+dbi1)xi

解得

{a=1+2b=12c=2+24d=224

2 在模 109+7 下有二次剩余 59713600

gn=24((1+2)n(12)n)

P4091 [HEOI2016/TJOI2016] 求和#

P2490 [SDOI2011] 黑白棋#

P3235 [HNOI2014] 江南乐#

posted @   Lu_xZ  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示