本人代码无法通过第二个样例,但是神奇的可以AC,希望作者能给hack掉
#include<bits/stdc++.h>
using namespace std;
int n,m,d[270000],l[40][40];
double x[40],y[40];
int c(int i,int j){
if(x[i]==x[j])return 0;
if(x[i]==0)return 0;
double a=(y[i]*x[j]-y[j]*x[i])/(x[i]*x[i]*x[j]-x[j]*x[j]*x[i]);
double b=(y[i]-a*x[i]*x[i])/x[i];
if(a>0)return 0;
int sum=0;
for(int k=0;k<n;k++){
if(fabs(a*x[k]*x[k]+b*x[k]-y[k])<1e-10){
sum=sum|(1<<k);
}
}
return sum;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=0;i<n;i++)cin>>x[i]>>y[i];
for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)l[i][j]=c(i,j);
for(int i=0;i<(1<<n);i++)d[i]=1e9;
d[0]=0;
for(int i=0;i<(1<<n);i++){
for(int j=0;j<n;j++){
if((i&(1<<j))==0){
d[i|(1<<j)]=min(d[i|(1<<j)],d[i]+1);
}
}
for(int j=0;j<n;j++){
for(int k=j+1;k<n;k++){
if((i&(1<<j))==0&&(i&(1<<k))==0){
d[i|l[j][k]]=min(d[i|l[j][k]],d[i]+1);
}
}
}
}
cout<<d[(1<<n)-1]<<endl;
}
return 0;
}