P1158 飛彈攔截

2021-10-10 06:39:01 字數 2018 閱讀 6909

題目描述

經過 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的距離,取距離較小的...