平凡的做题记录

12.25

P3270 [JLOI2016] 成绩比较

先考虑每个科目课内满足给定要求的成绩方案数,不考虑具体哪些人是哪些人,对于每一个科目,暴力枚举 B 成绩:

\[\sum_{b=1}^U b^{N-R}(U-b)^{R-1} \]

二项式定理暴力拆:

\[\sum_{b=1}^Ub^{N-R}\sum_{j=0}^{R-1}\binom{R-1}{j}(-1)^{R-1-j}U^jb^{R-1-j}\\ \sum_{b=1}^U\sum_{j=0}^{R-1}\binom{R-1}{j}(-1)^{R-1-j}U^jb^{N-j-1}\\ \sum_{j=0}^{R-1}\binom{R-1}{j}(-1)^{R-1-j}U^j\sum_{b=1}^Ub^{N-j-1} \]

最后那个自然数幂和可以拉插。可以做到 \(O(mn^2\log n)\)

上面部分是独立的一个系数。考虑剩下的部分,恰好转钦定,然后是很平凡的组合数学。懒得写了。

P3643 [APIO2016] 划艇

有:

\[f(i,j)=f(i-1,j)+[a_i\le j\le b_i]\sum_{k=0}^{j-1}f(i-1,k) \]

不难发现按 \(a,b\) 将值域分为至多 \(2n+1\) 段后,每一段内都是一个多项式,一个段被操作一次后阶数至多增 \(1\),直接拉插可以做到 \(O(n^3)\)

反正我会被洛谷 \(1s\) 时限卡常。以后练到组合数再补得了。

AT_abc212_h [ABC212H] Nim Counting

先手能赢当且仅当所有堆石子数异或和非零。有 DP:

\[f(i,j)=\sum_{k=1}^K f(i-1,j\oplus A_k) \]

简单改写:

\[f(i,j)=\sum_{k=0}^{2^{16}-1}f(i-1,j\oplus k)cnt_k\\ f(i,j)=\sum_{a\oplus b=j}f(i-1,a)cnt_b=\sum_{a\oplus b=j}f(i-1,a)f(1,b) \]

发现是个异或卷积形式。考虑 FWT。由 FWT 的线性性,所求即为:

\[\mathrm{IFWT}(\sum_{i=1}^n\mathrm{FWT}^i(f)) \]

等比数列公式直接套即可,注意特判 \([i]\mathrm{FWT}(f)=1\) 也就是公比为 \(1\) 的情况。

12.27

BK5334 [BestCoder Round #88] Tree Cutting(改)

考虑一个暴力树上 DP,然后 FWT 优化一下转移就做完了。

P4336 [SHOI2016] 黑暗前的幻想乡

观察数据范围不难想到应该是个状压。

每个公司恰好负责一条路太难搞了,发现可以转化为每个公司都有负责。这个就很好容斥了。

具体的,枚举钦定哪些公司不负责,然后只把要负责的公司的边加进去,跑矩阵树定理即可。\(O(2^nn^3)\)

P3317 [SDOI2014] 重建

注意是恰有 \(n-1\) 条边存在,因此我们要求的实际上是:

\[\sum_T\prod_{e\in T}p_e\prod_{e\not\in T}(1-p_e) \]

推一下式子:

\[\sum_T\prod_{e\in T}p_e\frac{\prod_e(1-p_e)}{\prod_{e\in T}(1-p_e)}\\ \prod_e(1-p_e)\sum_T\prod_{e\in T}\frac{p_e}{1-p_e} \]

对后面那个跑矩阵树定理即可。但是 \(p_e=1\) 时这个式子会出问题,我们令所有 \(1-p_e\) 加上 \(eps\) 即可。

CF917D Stranger Trees

好多 trick!

首先套路地恰好转钦定,考虑如何求钦定 \(k\) 条边重合的方案数,很巧妙的是这个恰等于 \(n-k\) 个连通块生成树的方案数!

然后一个很经典的式子是求 \(n\)\(k\) 个连通块生成树方案数,其中 \(a_i\) 表示第 \(i\) 个连通块的点数:

\[n^{k-2}\prod_{i=1}^ka_i \]

这时候已经可以 \(O(n^3)\) 树上背包了。但还可以继续优化。

考虑 \(\prod a\) 这个东西的组合意义,发现等价于每个连通块内选一个点的方案数,于是可以设计 DP \(f(i,j,0/1)\) 表示点 \(i\) 子树内有 \(j\) 个连通块且 \(i\) 所在连通块选没选点的方案数。转移显然。于是就做到了 \(O(n^2)\)

posted @ 2025-12-25 20:44  LastKismet  阅读(2)  评论(0)    收藏  举报