人类智慧150UnAC求调
查看原帖
人类智慧150UnAC求调
951212
2333_qwq楼主2025/7/24 15:06
#include<bits/stdc++.h>
#define maxn 423456
#define int long long
using namespace std;
struct node{
	int a[4];
}p[maxn];
int n,ans=0x3f3f3f3f3f3f3f3f,X,Y,X_,Y_;
double z,w,x[maxn],y[maxn],x_,y_;
bool cmp(const node&u,const node&v){
	return u.a[0]*u.a[1]<v.a[0]*v.a[1];
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);
	for(int OrzZky=1;OrzZky<=3;OrzZky++){
		z=sin(OrzZky);
		w=cos(OrzZky);
		for(int i=1;i<=n;i++){
			x_=x[i]*w-y[i]*z;
			y_=x[i]*z+y[i]*w;
			X=x[i];
			Y=y[i];
			X_=x_;
			Y_=y_;
			p[i].a[0]=X_;
			p[i].a[1]=Y_;
			p[i].a[2]=X;
			p[i].a[3]=Y;
		}
		if(n==2){
			printf("%lld\n",(x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]));
			return 0;
		}
		sort(p+1,p+n+1,cmp);
		for(int i=n+1;i<=n+10;i++)p[i].a[0]=p[i].a[1]=-maxn-0.01;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=60;j++){
				X=p[i].a[2];
				Y=p[i].a[3];
				X_=p[i+j].a[2];
				Y_=p[i+j].a[3];
				z=(X-X_)*(X-X_)+(Y-Y_)*(Y-Y_);
				if(ans>z&&z!=0)ans=z;
			}
		}
	}
	printf("%lld\n",ans);
	return 0;
}
2025/7/24 15:06
加载中...