noip2010 飛彈攔截

2021-08-03 06:22:43 字數 1563 閱讀 8266

經過11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷:每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。 某天,雷達捕捉到敵國的飛彈來襲。由於該系統尚處於試驗階段,所以只有兩套系統投入工作。如果現在的要求是攔截所有的飛彈,請計算這一天的最小使用代價。

第一行包含4 個整數x1、y1、x2、y2,每兩個整數之間用乙個空格隔開,表示這兩套飛彈攔截系統的座標分別為(x1, y1)、(x2, y2)。

第二行包含1 個整數n(1 ≤ n ≤ 100000)。表示有n 顆飛彈。

接下來n 行,每行兩個整數x、y,中間用乙個空格隔開,表示一顆飛彈的座標(x, y)。不同飛彈的座標可能相同。

所有座標分量的絕對值都不超過1000。

只有一行,包含乙個整數,即當天的最小使用代價。

0 0 10 0 

2 -3 3

10 0

copy

18

copy

0 0 6 0 

5 -4 -2

-2 3

4 0

6 -2

9 1copy

30

copy

每個測試點1s。

兩個點(x1, y1)、(x2, y2)之間距離的平方是(x1− x2)2+(y1−y2)2。

兩套系統工作半徑r1、r2 的平方和,是指r1、r2 分別取平方後再求和,即r12 +r22 。

樣例1說明:

樣例1 中要攔截所有飛彈,在滿足最小使用代價的前提下,兩套系統工作半徑的平方分 別為18 和0。

樣例2說明:

樣例中的飛彈攔截系統和飛彈所在的位置如下圖所示。要攔截所有飛彈,在滿足最小使用代價的前提下,兩套系統工作半徑的平方分別為20 和10。

noip2010普及組 題解

首先對於每個飛彈 算出他到ab裝置的距離的平方 因為答案也是要求平方所以不用double 了

然後以到a的距離 從小到大排序

設a裝置攔截到第i個飛彈 那麼與a裝置小於第i個飛彈的都被i攔截了(因為排了序所以就是i之前的)

然後距離大於i的都被b攔截了

所以這個時候列舉這個斷點i 比較出最小的花費就是答案了

寫的時候比較巧妙 詳細見注釋

#include#include#include#include#include#include#define inf 0x7fffffff

using namespace std;

struct nodedis[100005];

int getdis(int x,int y,int a,int b)

bool cmp(node xx,node yy)

printf("%d",ans);

return 0;

}

NOIP 2010 飛彈攔截

題目描述 經過 11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為 0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。某...

noip2010飛彈攔截

洛谷的題。在此省略題目。這題還是比較水的。開始想用字首s1和與字尾s2和做。後來發現是不是。沒辦法還是自己太菜了。其實這道題很簡單。就是給兩個點,然後一系列的點,問以這兩個點為圓心的半徑平方後之和最小是多少。我們可以用結構體排序做。用乙個結構體陣列a i s1和a i s2如下 struct dra...

noip2010 飛彈攔截 (貪心)

p1810飛彈攔截 accepted 標籤 noip普及組2010 經過11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半...