【题解】P6667 [清华集训2016] 如何优雅地求和

orz fjy666 orz fjy666 orz fjy666

神 · fjy666 · 拉普拉斯 · 爱因斯坦大帝于 5min 内爆切了此题,膜拜!

思路

斯特林数。

注意到 f(k) 是多项式而式子中含有组合数,于是考虑到普通多项式转下降幂多项式。

不妨设 f(k)=i=0mfiki=i=0mbiki_.

我们知道当 m 较小时可以 O(m2) 通过 fi 求出 bi,但是这里给出的是多项式的点值。

暂且忽略,尝试用下降幂多项式化简。

代入多项式有:Q(f,n,x)=k=0nf(k)(nk)xk(1x)nki=0mbiki_.

整理成多项式的形式是:i=0mbik=0nki_(nk)xk(1x)nk.

注意到下降幂和组合数有结论:(nk)ki_=ni_(niki).

于是原式等价于 i=0mbik=0nni_(niki)xk(1x)nk.

整理一下得 i=0mbini_k=0n(niki)xk(1x)nk.

后面的和式可以换种写法:i=0mbini_k=0ni(nik)xk+i(1x)nki.

提出来 xk 就可以二项式定理:i=0mbini_xkk=0ni(nik)xi(1x)nki=i=0mbini_xk(1x+x)nk=i=0mbini_xk.

于是只需要求出 b.

考虑多项式 f 点值的 EGF:nf(n)xnn!.

f(n) 代入得 nxnn!i=0mbini_.

注意到 ni_n!=n!(ni)!1n!=1(ni)!.

于是有原式等于 i=0mbinxnn!ni_=i=0mbixinxni(ni)!.

明显是两个多项式的卷积形式,于是 O(nlogn) 可以解决。

代码

posted @   kymru  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示
主题色彩