P1429 平面最近點對(加強版)(分治)

2022-04-07 21:41:19 字數 511 閱讀 3206

p1429 平面最近點對(加強版)

主要思路:

分治,將點按橫座標為第1關鍵字公升序排列,縱座標為第2關鍵字公升序排列,進入左半邊和右半邊進行分治。

設d為左右半邊的最小點對值。然後以mid這個點為中心,擴充套件寬為2d,長為2d的正方形。除了這個正方形外的點都不可能使答案更小。而且這個正方形裡至多8個點(可以證明至多6個,我不會。but,知道至多8個就夠了,這樣已經保證了複雜度。)一句話證明:如果多餘8個點,那麼必有2個點的最小距離比d小。這8個點內暴力列舉就好了。

#includeusing namespace std;

#define int long long

const int n=1000005;

const double inf=1e12;

struct nodep[n];

bool cmp(node a,node b)

} return d;

}signed main()

P1429 平面最近點對(加強版)

題目描述 給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的 輸入格式 第一行 n 2 n 200000 接下來n行 每行兩個實數 x y,表示乙個點的行座標和列座標,中間用乙個空格隔開。輸出格式 僅一行,乙個實數,表示最短距離,精確到小數點後面4位。輸入...

P1429 平面最近點對(加強版)

給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的 輸入格式 第一行 n 2 n 200000 接下來n行 每行兩個實數 x y,表示乙個點的行座標和列座標,中間用乙個空格隔開。輸出格式 僅一行,乙個實數,表示最短距離,精確到小數點後面4位。輸入樣例 1 ...

P1429 平面最近點對(加強版) 分治

平面上n nn個點,求最近點對 考慮分治求最近點對,首先將平行於y yy軸將平面穿過x xx左邊的中位數分割成兩半,現在最近點對有三種可能,在分割線左邊 在分割線右邊 穿過分割線 我們知道1和2可以用分治到兩邊計算,考慮如何求情況3。暴力列舉對數肯定會tle tletl e,考慮優化,假設我們已經知...