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

2021-10-10 21:11:17 字數 2474 閱讀 7275

題目描述

在與聯盟的戰鬥中屢戰屢敗後,帝國撤退到了最後乙個據點。

依靠其強大的防禦系統,帝國擊退了聯盟的六波猛烈進攻。

經過幾天的苦思冥想,聯盟將軍亞瑟終於注意到帝國防禦系統唯一的弱點就是能源**。

該系統由n個核電站**能源,其中任何乙個被摧毀都會使防禦系統失效。

將軍派出了n個**進入據點之中,打算對能源站展開一次突襲。

不幸的是,由於受到了帝國空軍的襲擊,他們未能降落在預期位置。

作為一名經驗豐富的將軍,亞瑟很快意識到他需要重新安排突襲計畫。

他現在最想知道的事情就是哪個**距離其中任意乙個發電站的距離最短。

你能幫他算出來這最短的距離是多少嗎?

輸入格式

輸入中包含多組測試用例。

第一行輸入整數t,代表測試用例的數量。

對於每個測試用例,第一行輸入整數n。

接下來n行,每行輸入兩個整數x和y,代表每個核電站的位置的x,y座標。

在接下來n行,每行輸入兩個整數x和y,代表每名**的位置的x,y座標。

輸出格式

每個測試用例,輸出乙個最短距離值,結果保留三位小數。

每個輸出結果佔一行。

分治+二分(最近點對問題)

演算法分析:這是一道經典的最近點對問題的模板,這裡略微講述一下這種問題的解法,首先呢,我們將這些點的x

xx座標,為第一關鍵字,y

yy座標為第二關鍵字,從小到大排序,接著我們取乙個中點mid

midmi

d點,將mid

midmi

d點左邊的點,統統歸為平面d1d1

d1,然後mid

midmi

d點右邊的點統統歸為平面d2d2

d2如下圖所示。

然後在如圖所示的左右均d/2

d/2d/

2區域中,再按y

yy為關鍵字排序。再暴力列舉。注意可以剪枝。

時間複雜度是o(n

logn

logn

)o(nlognlogn)

o(nlog

nlog

n)。優化主要是在跨區間的尋找上,可以省掉不少的列舉時間。

119 襲擊(平面最近點對)

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

AcWing 119 襲擊 平面最近點對

經典問題,平面最近點對,使用分治來解決 把所有點按橫座標排序,分治求解距離 合併時將兩邊的最近點對距離也比較一下 屬於不同集合的點比較距離時判斷一下即可 include include include include include include includeusing namespace st...

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2 ...