萌新不是刚学OI, 不是妹子,分治 5 pts求条,玄8关
查看原帖
萌新不是刚学OI, 不是妹子,分治 5 pts求条,玄8关
1250354
CP_2309楼主2024/7/29 09:18

代码

#include <bits/stdc++.h>
#define min(x,y) (x)<(y)?(x):(y)
#define int long long
using namespace std;
const int N=4e5+10;
struct node
{
	int x, y;
	double kx,ky;
}x[N],a[N];
inline double dis(node a,node b) 
{
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
inline bool cmpx(node a,node b)
{
	return a.x<b.x;
}
int n;
inline bool cmpy(node a,node b)
{
	return a.y<b.y;
}
inline double dfs(int l,int r)
{
	if (l>=r)
	{
		return 1e18;
	}
	register int mid=(l+r)>>1;
	double ans=min(dfs(l,mid),dfs(mid+1,r));
	int cnt=0;
	for (register int i=l;i<=r;++i)
	{
		if (abs(a[i].x-a[mid].x)<=ans)
		{
			x[++cnt]=a[i];
		}
	}
	stable_sort(x+1,x+cnt+1,cmpy);
	for (register int i=1;i<=cnt;++i)
	{
		for (register int j=i+1;j<=cnt;++j)
		{
			if(abs(x[j].y-x[i].y)>=ans) break;
			ans=min(ans,dis(x[i],x[j]));
		}
	}
	return ans;
}
signed main() 
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n;
    for (register int i=1;i<=n;++i)
    {
        cin >> a[i].x >> a[i].y;
	}
	stable_sort(a+1,a+n+1,cmpx);
	double k=dfs(1,n);
	printf("%.0lf",k*k);
    return 0;
}  	
2024/7/29 09:18
加载中...