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

2021-08-02 03:21:13 字數 799 閱讀 8634

題面:luogu1429

關於求平面最近點對的方法有很多很多。。。

像是那種隨機旋轉角度然後暴力算的這種方法就很鬼畜qaq

靠譜一點的演算法呢就是分治了

我們計算區間l~r的最近距離

首先計算l~mid和mid~r的最近距離,然後考慮一下mid左邊和mid右邊對答案的貢獻

首先記錄下dist=min(l~mid答案,mid~r答案),然後把左邊x座標與mid的差小於等於dist的點統計出來,再把右邊x座標與mid的差小於等於dist的點統計出來

然後左邊右邊暴力判斷統計答案就行了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

inline double s

qr(double x)

struct ppapa[200001];

ppap p1[200001],p2[200001];

inline bool cmp(ppap a,ppap b)

int n,pp1,pp2;

inline double work(int l,int r)

return ans;

}int main()

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

題目大意 平面最近點對。思路 分治。首先將所有點排序 每次把當前區間分為兩半,遞迴求解兩個區間內部的情況,然後列舉區間兩邊的點。1 include2 include3 include4 include5 inline int getint 12 typedef std pairpoint 13con...

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

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

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

p1429 平面最近點對 加強版 主要思路 分治,將點按橫座標為第1關鍵字公升序排列,縱座標為第2關鍵字公升序排列,進入左半邊和右半邊進行分治。設d為左右半邊的最小點對值。然後以mid這個點為中心,擴充套件寬為2d,長為2d的正方形。除了這個正方形外的點都不可能使答案更小。而且這個正方形裡至多8個點...