【总结】 拉格朗日差值

传送门


拉格朗日差值其实很简单,而且证明也很明显。虽然联赛不一定会考这个东西,但是还是要写一下总结。
大致的公式就是\(\sum_{i=1}^ny_i\prod_{j=1}^n\frac{(x-x_j)}{(x_i-x_j)}(j!=i)\)
证明也不难,然后如果x是连续的话可以前缀后缀积一下。

#include<stdio.h>
#include<math.h>
#define ll long long
const int N=2010;
const ll Mod=998244353;
ll x[N],y[N],n,k;
ll Pow(ll a,ll b){
	ll ret=1;
	while(b){
		if(b&1)ret=(ret*a)%Mod;
		a=(a*a)%Mod;b>>=1;
	}
	return ret;
}
ll lalr(){
	ll ans=0;
	for(int i=1;i<=n;i++){
		ll Up=1,Down=1;
		for(int j=1;j<=n;j++)
			if(i!=j){
				(Up*=(k-x[j]))%=Mod;
				(Down*=(x[i]-x[j]))%=Mod;
			}
		(ans+=(y[i]*Up)%Mod*Pow(Down,Mod-2))%=Mod;
	}
	return ans;
}
int main(){
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)
		scanf("%lld%lld",&x[i],&y[i]);
	printf("%lld\n",(lalr()%Mod+Mod)%Mod);
	return 0;
}
posted @ 2018-11-08 19:43  cjgjh  阅读(458)  评论(0编辑  收藏  举报