2022.12.10

今天又是抄的 joke3579 闲话 .

蓝桥杯 2021 国 A 积木

小蓝有大量正方体的积木(所有积木完全相同),他准备用积木搭一个巨大的图形 .

小蓝将积木全部平铺在地面上,而不垒起来,以便更稳定。他将积木摆成一行一行的,每行的左边对齐,共 n 行,形成最终的图形 .

第一行小蓝摆了 H1=w 块积木。从第二行开始,第 i 行的积木数量 Hi 都 至少比上一行多 L,至多比上一行多 R (当 L=0 时表示可以和上一行的积木数量相同),即

Hi1+LHiHi1+R

给定 x,yz, 请问满足以上条件的方案中,有多少种方案满足第 y 行的积木数量恰好为第 x 行的积木数量的 z 倍 .

1n5×1051w1090LR401x<yn0z109 .

答案可以分成 1x1xyy+1n 三部分 .

y+1n 的贡献是 (RL+1)ny,后面计算 1y 部分 .

根据组合意义,选一次的 OGF 即为 f(c)=i=LRci .

于是答案为:

k0[ck]fx(c)[cz(w+(x1)L+k)wk(y1)L]fyx(c)

其中求和因子 k 表示偏移后 x 行的方块个数,z(w+(x1)L+k)wk(y1)L 则为偏移后 y 行的方块个数 .

关于「偏移」的详细解释见 joke3579 闲话 .

这样有值的 k 只有 Θ(n(RL)) 个,枚举求即可 .

现在问题变成求一行的 fm(c) .

这个完全等价于求 (1cn1c)m,朴素实现是 Θ(nlogn) 的,然而此处的 n 的范围是原题记号下 n(RL) 级别的,无法通过 .

注意到 fm 是 D-finite 的,这表明可以找到一个整式递推来描述它 .

具体的,考察

ddcf(c)=m(1cn(1c)2ncn11c)(1cn1c)m1=m(1cn(1c)2ncn11c)(1c1cn)f(c)

左右提取 ck 项系数即可得到递推式,直接暴力递推即可,总时间复杂度 Θ(n(RL)) .

我写了一个 85pts 的暴力 NTT 代码,joke3579 实现了 100pts 的线性递推 .

posted @   yspm  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示