題目描述
經過 11年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為 0時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷:每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。
某天,雷達捕捉到敵國的飛彈來襲。由於該系統尚處於試驗階段,所以只有兩套系統投入工作。如果現在的要求是攔截所有的飛彈,請計算這一天的最小使用代價。
輸入格式
第一行包含 44個整數x1 、y1 、x2、y2,每兩個整數之間用乙個空格隔開,表示這兩套飛彈攔截系統的座標分別為(x1,y1)、(x2,y2)。 第二行包含11 個整數nn,表示有 nn顆飛彈。接下來n行,每行兩個整數 x,y,中間用 乙個空格隔開,表示一顆飛彈的座標(x,y)。不同飛彈的座標可能相同。
輸出格式
乙個整數,即當天的最小使用代價。
輸入輸出樣例
輸入 #1
0010
02-3
3100
輸出 #1
18
輸入 #2
006
05-4
-2-2
3406
-291
輸出 #2
30
說明/提示兩個點(x1,y1)、(x2,y2)之間距離的平方是(x1−x2)2+(y1−y2)2。
兩套系統工作半徑r1,r2的平方和,是指 r1,r2分別取平方後再求和,即r12+r22。
【樣例 1說明】
樣例1中要攔截所有飛彈,在滿足最小使用代價的前提下,兩套系統工作半徑的平方分別為18和0。
【樣例2 說明】
樣例2中的飛彈攔截系統和飛彈所在的位置如下圖所示。要攔截所有飛彈,在滿足最小使用代價的前提下,兩套系統工作半徑的平方分別為20 和10。
【資料範圍】
對於10%的資料,n=1
對於20%的資料,1≤n≤2
對於40%的資料,1≤n≤100
對於70%的資料,1≤n≤1000
對於100%的資料,1≤n≤100000,且所有座標分量的絕對值都不超過1000。
#include
#include
using
namespace std;
#define max 100005
int x1, y11, x2, y2, n, ans;
struct node
}a[max]
;int
main()
sort
(a +
1, a + n +1)
;for
(int i = n; i >0;
--i)
a[i]
.dist2 =
max(a[i +1]
.dist2,
int(
pow(x2 - a[i]
.x,2)+
pow(y2 - a[i]
.y,2))
);ans = a[1]
.dist2;
for(
int i =
1; i <= n;
++i)
ans =
min(ans, a[i +1]
.dist2 + a[i]
.dist1)
; cout << ans << endl;
}
P1158 飛彈攔截
思路 按每個點到第乙個系統的距離排序,然後預處理出每個點及其之後的點到第二個系統的距離的最大值,再迴圈一遍列舉答案。1 include 2 include 3 include 4 include 5 include 6 using namespace std 78 define res regist...
洛谷 P1158 飛彈攔截
題目描述 經過 11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為 0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。某...
洛谷p1158 飛彈攔截
這道題是個有想法的列舉qwq 飛彈攔截 題目鏈結 注意 此飛彈攔截非彼飛彈攔截p1020 飛彈攔截 一道題是1999年的,然後我們現在要寫的是經過11年韜光養晦之後的飛彈攔截 solution 要不先說一說我錯誤的貪心防止踩坑?錯誤貪心1 40pts 先比較某個點到攔截系統1和2的距離,取距離較小的...