|
a[id][j])
{
if(id!=i)
{
for(k=j;k<=c;k++)
swap(a[i][k],a[id][k]);
}
for(k=i+1;k<=r;k++)
{
if(!a[k][j]) continue;
cnt=(cnt*a[i][j])%mod;
for(int l=c;l>=j;l--)
{
a[k][l]=(a[k][l]*a[i][j]-a[i][l]*a[k][j])%mod;
a[k][l]=(a[k][l]+mod)%mod;
}
}
i++;
}
}
int x,y;
ext_gcd(cnt,mod,x,y);
x=(x%mod+mod)%mod;//x为cnt对mod的逆元
for(i=1;i<=r;i++)
x=(x*a[i][i])%mod;
return (x+mod)%mod;
}
int main()
{
int t,i,j,k,cas;
scanf("%d",&t);
while(t--)
{
scanf("%d%lf",&n,&r);
for(i=1;i<=n;i++)
p[i].input();
memset(a,0,sizeof(a));
memset(mp,0,sizeof(mp));
double rr=r*r;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
if(dis(p[i],p[j])>rr) continue;
int flag=1;
for(k=1;k<=n;k++)
{
if(i==k||j==k) continue;
//这个地方开始用的是运算符重载,结果超时了,改成自己定义就A了
if(love(i,k,j))//k在ij线段的中间
{
flag=0;
break;
}
}
if(flag)
{
mp[i][j]=mp[j][i]=1;
a[i][j]--; a[j][i]--;
a[i][i]++; a[j][j]++;
}
}
/*cout<
|