拉格朗日插值学习

模板

#include<bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int x[2010],y[2010],n,K,Ans=0;
inline int pw(int x,int p){
    int res=1;
    while(p){
      if(p&1)res=1ll*res*x%mod;
      x=1ll*x*x%mod;
      p>>=1;
    }
    return res;
}
int main(){
    int i,j,k;
    scanf("%d%d",&n,&K);
    for(i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
    for(i=1;i<=n;i++){
      int res=1;
      for(j=1;j<=n;j++)if(i!=j)res=1ll*res*(K-x[j])%mod*pw(x[i]-x[j],mod-2)%mod;
      Ans=(Ans+1ll*y[i]*res%mod)%mod;
    }
    printf("%d\n",Ans);
    return 0;
}

 

posted @ 2019-09-06 07:14  水题收割者  阅读(293)  评论(0编辑  收藏  举报