「解题报告」CF755G PolandBall and Many Other Balls

互测搬的题。教练整的 PDF LaTeX 全炸了,我在这里再发一遍。(虽然也不会有人看)

题目来源:CF755G

5pts 做法

我会爆搜!

直接 DFS 枚举选择方案。

20pts 做法

我会 DP!

fi.j 表示考虑前 i 个球,已经选出了 j 组的方案数,那么不难得出转移式:

fi,j=fi1,j+fi1,j1+fi2,j1

于是复杂度 O(nk)

k=1

选组大小为 1 的方案数为 n,大小为 2 的方案数为 n1,所以答案等于 2n1

k=2

分三种情况考虑:

  1. 两组大小都为 1(n2)
  2. 一组为 1,另一组为 2:考虑先从 n1 的序列中选两个数,然后在第二个数后面加一个数,左右翻转也一样,那么答案就是 2(n12)
  3. 两组都为 2:考虑从 n2 的序列中选两个数,然后在左面的数的左侧、右面的数的右侧加一个数,那么答案就是 (n22)

O(nlog2n) 做法

其实做到 DP 这一步你就应该想到一些什么吧)

假如我们把 fi,j 看作一个关于 j 的生成函数 Fi,那么就可以把 DP 写成以下的形式:

Fi=Fi1+xFi1+xFi2

也就是:

Fi=(1+x)Fi1+xFi2

这东西其实就是一个生成函数的递推式,于是我们有一个非常弱智的做法:直接矩阵快速幂。这样复杂度就是 O(nlog2n) 的,足以通过此题。

还有一个做法是倍增 FFT,对一开始的 DP 式子进行一些更改可以推出 G2n,G2n+1,Gn 的关系,不过我太菜了确实看不出怎么更改成这样的形式,所以想看的自己看题解吧。

O(nlogn) 做法

其实写出来上面的做法就够了,这个做法比较无脑:

考虑我们得到了 Fi=(1+x)Fi1+xFi2 这样的一个递推式,我们直接解这个递推式。

它的特征方程为 λ2=(1+x)λ+x,解得 λ1=1+x+x2+6x+12,λ2=1+xx2+6x+12

那么 Fn=A×λ1n+B×λ2n

{F0=A+B=1F1=Aλ1+Bλ2=1+x

解得:

{A=λ1x2+6x+1B=λ2x2+6x+1

于是:

Fn=λ1n+1λ2n+1x2+6x+1

由于 λ2 是不存在常数项的(x2+6x+1 的常数项肯定是 1),所以 λ2n+1 的最低次项也是 n+1 次的,而大于 n 答案肯定是 0,所以这一项我们就直接不计算了,也就是我们直接计算:

1x2+6x+1(1+x+x2+6x+12)n(modxn+1)

然后就可以直接上多项式全家桶就可以做到 O(nlogn) 了。

posted @   APJifengc  阅读(108)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示