没错,这几天不学无术,只会抄板子…
这又是一篇板子记录贴…
拉格朗日插值,食用方法如下:
拉格朗日插值模板题
由小学知识可知,n个点(xi,yi)可以唯一地确定一个多项式。
现在,给定n个点,请你确定这个多项式,并将k代入求值。
求出的值对998244353取模。
直接输入n个点的坐标,然后调用lglr(k)即可把k带入求值。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
const int mod = 998244353;
int n, k, x[maxn], y[maxn];
ll qpow(ll a, ll b)
{
ll ans = 1;
while(b>0)
{
if(b & 1) ans = ans*a%mod;
b>>=1;
a = a*a%mod;
}
return ans%mod;
}
ll lglr(int k)
{
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) continue;
up = up*(k-x[j]+mod)%mod;
down = down*(x[i]-x[j]+mod)%mod;
}
ans = (ans+y[i]*up%mod*qpow(down,mod-2)%mod)%mod;
}
return ans;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i = 1; i <= n; i++) scanf("%d%d",x+i,y+i);
printf("%d\n", lglr(k));
return 0;
}