知识点:分治+平面最近点对
全部排好序后:截中点
分别先考虑左右两半 假设左右两半最近点距为d 就再在距离mid d的范围内考虑就可 一层层递归下去时间复杂度不太高
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
struct wz
{
int x,y;
bool k;
}a[200005];
bool cmp(wz x,wz y)
{
if(x.x==y.x)return x.y<y.y;
return x.x<y.x;
}
double dis(int u,int v)
{
return sqrt(1.00*