贴一下我的代码,不过不看也无所谓
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,x[2005],y[2005],mod=998244353,ans;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
int ret=exgcd(b,a%b,x,y),t=x;
x=y;
y=t-(a/b)*x;
return ret;
}
ll inv(ll x)
{
ll ans,y;
exgcd(x,mod,ans,y);
return (ans%mod+mod)%mod;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++)
{
ll ans_up=y[i],ans_down=1;
for(int j=1;j<=n;j++)
{
if(j==i) continue;
ans_up=(ans_up*(k-x[j]))%mod;
ans_down=(ans_down*(x[i]-x[j]))%mod;
}
ans=(ans+(ans_up*inv(ans_down)))%mod;
}
cout<<(ans+mod)%mod<<endl;
return 0;
}
这样求出来的逆元正负老是出问题