P3338 [ZJOI2014]力
Ei=i−1∑j=1qj(i−j)2−n∑j=i+1qj(i−j)2
设 f(x)=qx,g(x)=x2,h(x)=qn−x+1。
前半部分为 (f∗g)(i),后半部分为 (h∗g)(i)。
P3723 [AH2017/HNOI2017]礼物
n−1∑i=0(xi+p−yi)2=n−1∑i=0x2i+y2i+p2+2(xi−yi)p−2n−1∑i=0xiyi
设 d∈[0,n−1]。
n−1∑i=0x(i)y(i+d)=n−1∑i=0x(n−i−1)y(i+d)
P5488 差分与前缀和
设 给定的多项式为 F(x),那么 k 维前缀和为
F(x)×1(1−x)k
k 维差分为
F(x)×(1−x)k
考虑差分的情况怎么做
(1−x)k=n∑i=0(−1)i(ki)xi
(k0)=1,(ki)=(ki−1)×k−i+1i。
考虑前缀怎么做,第 x 项的答案为 (x+k−1k−1)。
P5641 【CSGRound2】开拓者的卓识
考虑 y 会在 sum(k,1,x) 中计算几次。
sum(k,1,x)=x∑y=1a(y)(x−y+k−1k−1)(y−1+k−1k−1)=x∑y=1f(y)g(x−y)
其中,f(x)=a(x)(x+k−2k−1),g(x)=(x+k−1k−1)。
k 很大,因此需要递推计算 f(x) 和 g(x)。
(x+st)=(x+sx+s−t)
设 f(i,j) 表示前 i 个数中选择 j 个 1 的方案数(只考虑这 j 个 1,忽略其它 k−j 个位置)。
f(i,j)=j∑p=1f(i−1,j−p)(jp)2j−p
f(n+m,i)=i∑j=0f(n,j)f(m,i−j)(ij)2mj
于是可以倍增
f(2n,i)=i∑j=0f(n,j)f(n,i−j)(ij)2nj
这就体现了设 f(i,j) 为只考虑 j 个 1 的好处,它使得 dp 值可以合并。
如果不这么设,比如设 f(i,j) 表示前 i 个数中选择 j 个 1 且要考虑位置的方案数,那么就只能得到一个递推式而得不到合并的式子,就无法解决该问题。
得到了合并的 dp 式,就可以使用倍增 FFT 解决。
CF1251F Red-White Fence
红板个数很少,于是考虑对每个红板单独处理。
先考虑长度小于红板的白板长度不重复的情况。
假设有 n 个这样的白板,选 i 个的答案为 (ni)2i。
现在考虑重复的情况,可以发现,重复个数大于 2 等价于重复个数为 2。
假设有 m 对重复的白板,选 i 个的答案为 (2mi)。
设选择 x 个白板的答案为 f(x)。
f(x)=x∑i=0(ni)2i(2mx−i)
算出所有 f(x) 统计一下答案就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】