解决的问题
已知 $n$ 次函数上的 $n$ 个不同点,求解析式/某个 $f(x)$ 的值。
方法
我们可以用一个通用的方法构造一个满足条件的函数:
\[\begin{aligned} f(x) =&\{y_1 \cdot \frac{(x-x_2)(x-x_3)...(x-x_n)}{(x_1-x_2)(x_1-x_3)...(x_1-x_n)}\}\\ +&\{y_2 \cdot \frac{(x-x_1)(x-x_3)...(x-x_n)}{(x_2-x_1)(x_2-x_3)...(x_2-x_n)}\}\\ +&\{y_3 \cdot \frac{(x-x_1)(x-x_2)...(x-x_n)}{(x_3-x_1)(x_3-x_2)...(x_3-x_n)}\}\\ ...\\ +&\{y_n \cdot \frac{(x-x_1)(x-x_2)...(x-x_{n-1})}{(x_n-x_1)(x_n-x_2)...(x_n-x_{n-1})}\}\\ \end{aligned}\]模版
int n,k,x[2020],y[2020];
int main(){
scanf("%d%d",&n,&k);
ll ans=0;
for(int i=1;i<=n;++i)scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<=n;++i){
ll a=1,b=1;
(a*=y[i])%=mod;
for(int j=1;j<=n;++j){
if(i==j)continue;
(a*=(k-x[j]))%=mod;
(b*=(x[i]-x[j]))%=mod;
}
a*=inv(b);
a%=mod;a+=mod;a%=mod;
(ans+=a)%=mod;
}
printf("%lld\n",ans);
}