oi-wiki
给出 n 个点 Pi(xi,yi),将过这 n 个点的最多 n−1 次(为什么是 n−1 次:因为可以构造出 n 个线性方程,只能解出从常数项系数到 n−1 次项的系数)的多项式记为 f(x) ,求 f(k) 的值。
如图所示,将每一个点在 x 轴上的投影 (xi,yi) 记为 Hi 。对每一个 i ,我们选择一个点集 {Pi}∪{Hj∣1≤i≤n,i=j} ,作过这 n 个点的至多 n−1 次的线 gi(x) 。图中 f(x) 用黑线表示,gi(x) 用彩色线表示。
这样得到的 gi(x) 在各自对应的 xi 处取得 yi 的值,在 xj(j=i) 处取得 0。
构造出 gi(x) 表达式:
gi(x)=yij=i∏xi−xjx−xj
代入 xi 可得 gi(x)=yi∏j=ixi−xjxi−xj=yi
代入 xj(j=i) ,gi(x)=yi∏k=ixi−xkxj−xk=yi×0=0
将所有的 gi(x) 求和即可得到 f(x) ,即
f(x)=i=1∑nyij=i∏xi−xjx−xj
求出 f(k)
f(k)=i=1∑nyij=i∏xi−xjk−xj
可以把分子分母都计算出来,再计算一遍逆元,复杂度 O(n2)