AcWing 119 襲擊 平面最近點對

2022-07-12 03:24:08 字數 959 閱讀 7069

經典問題,平面最近點對,使用分治來解決

把所有點按橫座標排序,分治求解距離

合併時將兩邊的最近點對距離也比較一下

屬於不同集合的點比較距離時判斷一下即可

#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 200010;

const double inf = 2 << 28;

int t, n, tot;

struct pointp[maxn], tmp[maxn];

bool cmp(point a, point b)

double calc(point a, point b)

double merge(int l, int r)

if(l + 1 == r)

int mid = (l + r) >> 1;

double d1 = merge(l, mid);

double d2 = merge(mid + 1, r);

dis = min(d1, d2);

int cnt = 0;

for(int i=l; i <= r; ++i) }

sort(tmp + 1, tmp + 1 + cnt, cmp);

for(int i = 1;i <= cnt; ++i)

} return dis;

}ll read() while(ch>='0' && ch<='9') return s*f; }

int main()

sort(p + 1, p + 1 + tot, cmp);

printf("%.4lf\n",merge(1,tot));

return 0;

}

AcWing 119襲擊 平面點間對問題

思路 把所有點按橫座標排序 開始分治 l,r 遞迴到 l,r 上只有乙個點,或者有倆個點 找到中間點的橫座標,找到遞迴時最小間間距res 找到橫座標屬於min x res 到 min x res 的點 放到temp陣列中 將temp陣列按找y值排序 用暴力找到既屬於以邊長為res的正方形內 的倆個點...

119 襲擊(平面最近點對)

我們先求出只有一種點找兩個距離最近的點的方法,然後再延伸到找兩種點中的最近距離。假如只有一種點,我們先按照x來排序,且左半部分為 left mid 右半部分為 mid 1 r 我們先求出左半部分 left mid 點的最小值,再求出右邊部分點的最小值 mid 1 right 再合併求兩部分的最小值。...

題解 襲擊(平面最近點對)

題目描述 在與聯盟的戰鬥中屢戰屢敗後,帝國撤退到了最後乙個據點。依靠其強大的防禦系統,帝國擊退了聯盟的六波猛烈進攻。經過幾天的苦思冥想,聯盟將軍亞瑟終於注意到帝國防禦系統唯一的弱點就是能源 該系統由n個核電站 能源,其中任何乙個被摧毀都會使防禦系統失效。將軍派出了n個 進入據點之中,打算對能源站展開...