样栗不过
查看原帖
样栗不过
366316
桃雨凪丝楼主2022/7/10 17:25
#include<bits/stdc++.h>
#define I using
#define love namespace
#define me std
I love me;
typedef long long ll;
typedef double db;
#define re register int
#define ce continue
#define pf printf
#define sf scanf
#define inf 1e9+10
#define lim 100010
#define mod 998244353
#define eps 1e-8
//#define int ll
int gcd(int x,int y){return y?gcd(x,x%y):x;}
inline int rd(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
    while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*f;
}
int T;
int m,n;
db x[20],y[20];
int line[20][20];
int fir_empt[1<<20];
int dp[1<<20];  
bool same(db a,db b){
	if(fabs(a-b)<=eps){
		return true;
	}
	return false;
}
void pwx(db &x,db &y,db a1,db b1,db c1,db a2,db b2,db c2){
	y=(a1*c2-a2*c1)/(a1*b2-a2*b1);
	x=(c1-b1*y)/a1;
}
void deals(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(same(x[i],x[j]))ce;
			db l_x,l_y;
			pwx(l_x,l_y,x[i]*x[i],x[i],y[i],x[j]*x[j],x[j],y[j]);
			if(l_x>=-eps)ce;
			for(int k=1;k<=n;k++)
				if(fabs(l_x*x[k]*x[k]+l_y*x[k]-y[k])<eps) line[i][j]|=(1<<(k-1));  
		}
	}
}

void csh(){
	memset(x,-eps,sizeof x);
	memset(y,-eps,sizeof y);
	memset(dp,inf,sizeof dp);
	memset(line,0,sizeof line);
	dp[0]=0;
	cin>>n>>m;
	for(re i=1;i<=n;i++)cin>>x[i]>>y[i];
}
signed main(){
	ios_base::sync_with_stdio(false);cin.tie(0);
	for(int i=0;i<(1<<18);i++){
		int j=1;
		for(;j<=18&&i&(1<<(j-1));j++);
		fir_empt[i]=j;
	}
	cin>>T;
	while(T--){
		csh();
		deals();
		for(int i=0;i<(1<<n);i++){
			int j=fir_empt[i];
			dp[i|(1<<(j-1))]=min(dp[i|(i<<(j-1))],dp[i]+1);
			for(int k=1;k<=n;k++)
			dp[i|line[j][k]]=min(dp[i|line[j][k]],dp[i]+1);
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++)cout<<line[i][j]<<" ";
			cout<<endl;
		}
	//	cout<<dp[(1<<n)-1]<<endl;
	}
	return 0;
}

2022/7/10 17:25
加载中...