題目大意:
平面最近點對。
思路:分治。
首先將所有點排序
每次把當前區間分為兩半,遞迴求解兩個區間內部的情況,然後列舉區間兩邊的點。
1 #include2 #include3 #include4 #include5 inline intgetint()
12 typedef std::pairpoint;
13const
int n=200000;14
point p[n];
15int
num[n];
16double ans=1e10;
17 inline double sqr(const
double &x)
20 inline double dis(const point &a,const point &b)
23void solve(const
int &l,const
int &r) 33}
34for(register int i=l;i<=mid;i++) 39}
40}41}
42int
main()
47 std::sort(&p[0],&p[n]);
48 solve(0,n-1
);49 printf("
%.4f\n
",ans);
50return0;
51 }
分治 Luogu1429 平面最近點對(加強版)
題面 luogu1429 關於求平面最近點對的方法有很多很多。像是那種隨機旋轉角度然後暴力算的這種方法就很鬼畜qaq 靠譜一點的演算法呢就是分治了 我們計算區間l r的最近距離 首先計算l mid和mid r的最近距離,然後考慮一下mid左邊和mid右邊對答案的貢獻 首先記錄下dist min l ...
p1429 平面最近點對
題意 給平面n個點,求最近的兩個點的距離。思路 運用分治思想,對於n個點,可以分成t n 2 t n 2 的規模,分界線是x座標的中位數,假設左邊點集合為s1,右邊點集合為s2,那麼最小值存在於以下三種情況中。1.s1中任意兩點距離的最小距離 2.s2中任意兩點距離的最小距離 3.s1中的點到s2中...
洛谷1429 平面最近點對(KDTree)
題目鏈結 qwq 明明可以直接分治過掉的 但是還是當作聯絡了 首先,對於這種點的題,很顯然的套路,我們要維護乙個子樹mx i m n i mx i mn i mx i mn i 分別表示每個維度的最大值和最小值 這裡有乙個要注意的東西!就是我們upup up的時候,要判斷一下當前是否還有左 右兒子 ...