建议数据加强
查看原帖
建议数据加强
352918
I_think_so_i_am_here楼主2024/4/13 14:28

本人代码无法通过第二个样例,但是神奇的可以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;
}
2024/4/13 14:28
加载中...