AT_utpc2020_l
xujindong_ · · 题解
考虑让两维变独立。我们可以对
映射后,
#include<bits/stdc++.h>
using namespace std;
const int mod=299993,I=139302;
int n,z,inv[299993],p[299993],q[299993],a[299993],b[299993];
long long ans;
int main(){
inv[0]=inv[1]=1;
for(int i=0;i<mod;i++)p[i]=q[i]=1;
for(int i=2;i<mod;i++)inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;
cin>>n>>z;
for(int i=1,x,y,t;i<=n;i++){
cin>>x>>y,t=1ll*y*I%mod,y=(x-t+mod)%mod,x=(x+t)%mod;
for(int j=0;j<mod;j++)p[j]=1ll*p[j]*(j-x+mod)%mod,q[j]=1ll*q[j]*(j-y+mod)%mod;
}
for(int i=0;i<mod;i++)a[p[i]]++,b[q[i]]++;
if(!z)return cout<<1ll*(a[0]+b[0])*mod-1ll*a[0]*b[0]<<'\n',0;
for(int i=1;i<mod;i++)ans+=1ll*a[i]*b[1ll*z*inv[i]%mod];
return cout<<ans<<'\n',0;
}