开始了学习多项式秃头的旅途
拉格朗日插值
(f(x)=sumlimits_{i=1}^{n}y_i prodlimits_{j!=i} frac{x-x_i}{x_i-x_j})
如果题目中要求直接求(f(k))的话
可以直接用以下的公式(废话)
(f(k)=sumlimits_{i=1}^{n}y_i prodlimits_{j!=i} frac{k-x_i}{x_i-x_j})
拉格朗日插值扩展
在绝大多数题目中我们需要用到的(x_i)的取值都是连续的,这样的话我们可以把上面的算法优化到(O(n))复杂度
那么式子变成(f(k)=sumlimits_{i=0}^{n}y_i prod limits_{i eq j} frac{k-j}{i-j})
优化后面那一部分
记录一下分子的前缀积((pre_{i-1}))和后缀积((nex_{i+1})),然后折半相乘
分子的话就是阶乘(fac[i]*fac[n-i])
(update:)这里错了,应该是(fac[i-1]*fac[n-i]),(lgj)学长的博客里面写错了
最后得到式子(f(k)=sumlimits_{i=0}^{n}y_ifrac{pre_{i-1}*nex_{i+1}}{fac[i-1]*fac[n-i]})
注意分母的符号问题,当(n-i)是奇数时,应该是负号
见CF622F The Sum of the k-th Powers
重心拉格朗日插值法
设(g=prodlimits_{i=0}^{n}k-x_i)
[f(k)=gsumlimits_{i=0}^{n}prod limits_{i
eq j} frac{y_i}{(k-x_i)(x_i-x_j)}
]
设(t_i=prodlimits_{i eq j}frac{y_i}{(x_i-x_j)})
[f(k)=gsumlimits_{i=0}^{n}frac{t_i}{k-x_i}
]
所有每次新加入一个点的时候只需要计算它的(t_i)
例题
题目难度按照由易到难排序
CF622F The Sum of the k-th Powers
[large ext {暂时入土,未完待续}
]