洛谷 P1158 飛彈攔截

2021-07-24 07:32:10 字數 1547 閱讀 7386

題目描述

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

某天,雷達捕捉到敵國的飛彈來襲。由於該系統尚處於試驗階段,所以只有兩套系統投入工作。如果現在的要求是攔截所有的飛彈,請計算這一天的最小使用代價。

輸入輸出格式

輸入格式:

第一行包含 4 個整數x1、y1、x2、y2,每兩個整數之間用乙個空格隔開,表示這兩套飛彈攔截系統的座標分別為(x1, y1)、(x2, y2)。 第二行包含 1 個整數 n,表示有 n顆飛彈。接下來 n行,每行兩個整數 x、y,中間用 乙個空格隔開,表示一顆飛彈的座標(x, y)。不同飛彈的座標可能相同。

輸出格式:

輸出檔名 missile.out。

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

輸入輸出樣例

輸入樣例#1:

0 0 10 0

2 -3 3

10 0

輸出樣例#1:

輸入樣例#2:

0 0 6 0

5 -4 -2

-2 3

4 0

6 -2

9 1輸出樣例#2:

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

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

【樣例 1 說明】

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

別為18 和0。

【樣例2 說明】

樣例中的飛彈攔截系統和飛彈所在的位置如下圖所示。要攔截所有飛彈,在滿足最小使

用代價的前提下,兩套系統工作半徑的平方分別為20 和10。

【資料範圍】

對於10%的資料,n = 1

對於20%的資料,1 ≤ n ≤ 2

對於40%的資料,1 ≤ n ≤ 100

對於70%的資料,1 ≤ n ≤ 1000

對於100%的資料,1 ≤ n ≤ 100000,且所有座標分量的絕對值都不超過1000。

【分析】

排序+模擬

先計算出飛彈距離1號點的距離,以此為關鍵字排序。然後求出字尾最大值,列舉分界點更新答案。

2號亦然。

【**】

#include

#include

#define inf 100000

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

int a[505][505],mx[505],ci[505];

int main()

printf("1\n%d\n",ans);

return

0;}

洛谷p1158 飛彈攔截

這道題是個有想法的列舉qwq 飛彈攔截 題目鏈結 注意 此飛彈攔截非彼飛彈攔截p1020 飛彈攔截 一道題是1999年的,然後我們現在要寫的是經過11年韜光養晦之後的飛彈攔截 solution 要不先說一說我錯誤的貪心防止踩坑?錯誤貪心1 40pts 先比較某個點到攔截系統1和2的距離,取距離較小的...

洛谷P1158 飛彈攔截 排序

恢復內容開始 洛谷p1158 飛彈攔截 排序 算是有技巧的列舉吧 題意 用兩套系統來攔截飛彈,乙個系統的費用等於這個系統攔截的飛彈中離他最遠的那顆飛彈 和系統的距離 的平方 排序 將每顆飛彈按距離系統1 的距離排序,然後列舉n 0 選這些飛彈為系統1最遠能夠攔截的飛彈 然後就可以更新下一次 系統2要...

P1158 飛彈攔截

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