杂题选做
P4931
一道有点意思的数学题,但应该不至于黑。
法一:组合意义法
设 \(g(n)\) 表示 \(n\) 组情侣全部错开的方案数。
则
考虑 \(g(n)\) 怎么求。
不妨在最后一排放上一对非情侣,方案数为 \(2n \times (2n-2)\)。
考虑他们的伴侣是否坐在一起。
若不坐在一起,那么可以把他们视为情侣,方案数为 \(g(n-1)\)。
若坐在一起,那么就让剩下的人错排,再乘上选择一排与交换位置的方案数为 \(2(n-1) \times g(n-2)\)。
因此得到递推式:\(g(n)=2n(2n-2)(g(n-1)+2(n-1)g(n-2))\)。
法二:生成函数法
咕咕咕
CF932F
设 \(dp_i\) 表示位置 \(i\) 的答案。容易得出转移方程:
考虑如何优化。注意到 $$dp_u=b_va_u+dp_v$$ 是一个类似于一次函数斜截式的形式,考虑使用李超线段树维护下凸壳,每次查询 \(x=a_u\) 处的最小值即可。本题在树上转移,还需要套一个线段树合并。
Szkopul KINQUPYdU-rvH9sLu10tVFGl
\(m=1145141919\) 时容斥即可。
其余情况设 \(f_{i,j}\) 表示树高为 \(i\) 操作 \(j\) 次时的合法方案数。易得
直接转移是 \(O(nm^2)\) 的。注意到转移系数含组合数,考虑使用 EGF 描述。设
则可得递推式
注意到 \(\hat{G}_i(x)\) 可以写出封闭形式
于是有
这个直接算复杂度还是 \(O(nm^2)\),考虑套 exp ln 把卷积变成求和,注意 ln 里面的式子常数项要凑成 \(1\)
于是就能卷积 \(O(m^2)\) 计算。用 MTT 可以做到 \(O(m\log m)\)。
P5904
首先要注意到本题可以树形 dp,而且不好换根,应当钦定一个根硬做。显然以三个点之间的路径的最高点为“关键点”可以不重不漏地统计答案,于是自然地,设 \(f_{i,j}\) 表示在 \(i\) 子树中到 \(i\) 距离为 \(j\) 的点的个数,\(g_{i,j}\) 表示 \(x,y\) 在 \(i\) 子树中且 \(d(\operatorname{lca}(x,y),x)=d(\operatorname{lca}(x,y),y)=d(\operatorname{lca}(x,y),i)+j\) 的个数。列出转移方程:
于是就是长剖优化 dp 板子了。
P10656
注意到两个序列带权中点必选至少一个。
不妨设选 \(a\) 的带权中点,对 \(b\) 做扫描线,在右端点 \(r\) 右移时,维护选择每一个左端点 \(i\) 到 \(r\) 区间时 \(a\) 的最远左右端点。注意到随着 \(r\) 的右移,\(a\) 的最远左右端点单调不远。于是线段树与单调栈维护颜色段即可。
Szkopul Y3cfwzqIBcEI95girpkJ4XyQ
Szkopul ytEzni0ZUSaHB89mxlTxihtG
容易知道答案具有单调性,并且时间一定时,对于每一辆车,都有一个速度的最小值,大于等于它必然合法,小于它必然不合法。容易知道最后一辆车结束时尾部至少要到达 \(t\),倒数第二辆车结束时尾部要到达 \(t+r_1-l_1\),以此类推。于是设时间为 \(x\),则倒数第 \(i\) 辆车的最低速度为 \(v_{i\min}=\dfrac{t+\sum_{j=1}^{n-1}(r_j-l_j)}{x}\),加速次数为 \(\max\left\{\left\lceil \dfrac{v_{i\min}-v_i}{k}\right\rceil,0\right\}\)。二分答案即可,时间复杂度 \(O(n\log\dfrac{t}{\min v\epsilon})\)。注意到本做法复杂度与 \(m\) 无关,因此 \(m\) 可以开很大。

浙公网安备 33010602011771号