一道平面分治的板子題(做之前剛學會平面分治,太菜了)
把所有點按照x排序後,分成左半邊的最近距離和右半邊的最近距離,再以中點為圓心,目前的最近距離為半徑,做這個圓內的列舉,求最短距離。
注意:sqrt()裡面的數如果是int型別會比double型別慢,如果次數多了會t
**如下:
1 #include2view codeusing
namespace
std;
3struct
nodea[10005];6
bool cmp(node& a, node&b)
9double dis(int i,int
j)12
double erfen(int l,int
r)23}24
return
d;25}26
intmain()
33 sort(a+1,a+1+n,cmp);
34double ret=erfen(1
,n);
35if (ret>10000) printf("
infinity\n");
36else printf("
%.4f\n
",ret);37}
38 }
最近點對問題 UVa 10245 (分治)
給定平面上的n個點,求距離最近的兩個點的距離。限制條件 1 n 10000 思路 假設我們把所有點按x座標分成了左右兩半,那麼最近點對的距離就是下面二者的最小值 1 2點p和q同屬於左半邊或右半邊時點對 p,q 的距離 2 2點p和q屬於不同區域時點對 p,q 的距離 首先,對於 1 可以通過遞迴計...
分治入門 平面分治
分治思想 劃分子問題,解決子問題,合併子問題 題目 uva 10245 題意 在乙個二維平面內給定n個點,求最近的兩個點的距離。n 10000 題解 直接暴力列舉所有點是肯定行不通的。那麼基於分治的思想 按照橫座標排序後,分成兩個部分,那麼最近距離的點對就是以下的情況 1 兩個點均屬於乙個區域 2 ...
模板 平面最近點對 分治
傳送門 洛谷 平面最近點對 給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的。2 n 200000 一 分治 按x排序,左右分治,邊界處理一下就好了。include include include include include define db do...