专栏文章

Product Trick 初体验

CF961G题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mimz5lgc
此快照首次捕获于
2025/12/01 17:56
3 个月前
此快照最后确认于
2025/12/01 17:56
3 个月前
查看原文
这个题式子可以非常简单,刚好也用这个题试验一下以前都没用过的 product trick。
观察式子,S×xSwx|S|\times\sum_{x\in S}w_x 可以类比为 S×S|S|\times |S|,后者是在集合中有序可重选择两个东西的方案数。那么前者的式子显然为“在集合中有序可重选择两个东西,其中第一个贡献为 11,第二个贡献为 wxw_x,贡献乘积和”。
回到原题。我们要把这个大集合分成 kk 个小的,那么我们拆贡献,钦定一个点 xx 为选择的第二个数(贡献乘 wxw_x),那么这个钦定对答案带来的贡献就是“y1×wx×ways(x,y)\sum_{y}1\times w_x\times ways(x,y)”,其中 11 表示钦定 yy 为第一个数,贡献乘 11ways(x,y)ways(x,y) 表示分集合使得 x,yx,y 在一个集合(不然没有 1×wx1\times w_x 的贡献方法)的方案数。提出 wxw_x 项,那么问题转为快速计算 R=y=1nways(x,y)R=\sum_{y=1}^nways(x,y)
不难发现,ways(x,y1)=ways(x,y2)ways(x,y_1)=ways(x,y_2),当 y1x,y2xy_1\ne x,y_2\ne x 的时候。xyx\ne yways(x,y)ways(x,y) 相当于把 xxyy 绑到一起,就是 (n1)(n-1) 个物品放到 kk 个非空子集,显然贡献为第二类斯特林数 S(n1,k)S(n-1,k);而 x=yx=y 时贡献就是 S(n,k)S(n,k),每一种分法这个贡献一定是有的(自己和自己一定在一个集合)。
总结一下,R=y=1nways(x,y)=S(n,k)+yxS(n1,k)=S(n,k)+(n1)×S(n1,k)R=\sum_{y=1}^n ways(x,y)=S(n,k)+\sum_{y\ne x}S(n-1,k)=S(n,k)+(n-1)\times S(n-1,k)。故答案为 i=1naiR\sum_{i=1}^n a_iR
复杂度是计算单个斯特林数的 Θ(nlogn)\Theta(n\log n)
NOIP 2025 RP++

评论

1 条评论,欢迎与作者交流。

正在加载评论...