在與聯盟的戰鬥中屢戰屢敗後,帝國撤退到了最後乙個據點。
依靠其強大的防禦系統,帝國擊退了聯盟的六波猛烈進攻。
經過幾天的苦思冥想,聯盟將軍亞瑟終於注意到帝國防禦系統唯一的弱點就是能源**。
該系統由n個核電站**能源,其中任何乙個被摧毀都會使防禦系統失效。
將軍派出了n個**進入據點之中,打算對能源站展開一次突襲。
不幸的是,由於受到了帝國空軍的襲擊,他們未能降落在預期位置。
作為一名經驗豐富的將軍,亞瑟很快意識到他需要重新安排突襲計畫。
他現在最想知道的事情就是哪個**距離其中任意乙個發電站的距離最短。
你能幫他算出來這最短的距離是多少嗎?
輸入格式
輸入中包含多組測試用例。
第一行輸入整數t,代表測試用例的數量。輸出格式對於每個測試用例,第一行輸入整數n。
接下來n行,每行輸入兩個整數x和y,代表每個核電站的位置的x,y座標。
在接下來n行,每行輸入兩個整數x和y,代表每名**的位置的x,y座標。
每個測試用例,輸出乙個最短距離值,結果保留三位小數。資料範圍每個輸出結果佔一行。
1≤n≤100000,輸入樣例:240≤x,y≤1000000000
0 00 1
1 01 1
2 22 3
3 23 3
40 0
0 00 0
0 00 0
0 00 0
0 0輸出樣例:
1.414
0.000
平面最近點對問題詳解
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using namespace std;
typedef
long
long
int ll;
const
int n =
2e5+10;
struct pa[n]
, b[n]
;bool cmp
(p a, p b)
bool cmp1
(p a, p b)
double
dis(p a, p b)
double
solve
(int l,
int r)
}return ans;
}int
main()
for(
int i = n; i <
2* n; i++
) n *=2
;sort
(a, a + n, cmp)
;printf
("%0.3f\n"
,solve(0
, n -1)
);}return0;
}
平面最近點對問題 分治
1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2對點對逐對進行距離計算,通過迴圈求得點集中的最近點對 2 演算法時間複雜度 演算法一共要執行 n n 1 2次迴圈,因此演算法複雜度為o n2 實現 利用兩個for迴圈可實現所有點的配對,每次配對算出...
平面最近點對 cdq分治
cdq分治可以很好地處理平面點對間具有某種性質的值或數量,最近點對也不例外。參考oi wiki 先對x排序,cdq返回點集內部最近點對的距離記為mindis。考慮如何合併左右區間,對於處於點集a的點a和b的點b,顯然 a.x b.x m indi s a.x b.x mindis a.x b x m...
演算法 分治 平面最近點對
給定平面上n個點,找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的 將每乙個點按照橫座標排序,然後分治區間 1,n 1,n 1,n 再內乙個遞迴函式內 如下 include using namespace std struct node a 300000 int temp...