簡單排序 飛彈攔截

2021-09-13 20:46:51 字數 1397 閱讀 2855

題目描述:

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

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

輸入描述:

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

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

輸出描述:

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

示例:輸入:

輸出:說明:

輸入:

輸出:說明:

備註:

錯誤的想法:初一看這個題目,我直接就想到了用兩個陣列a, b儲存每個飛彈到兩個系統的距離,也就是假設飛彈到a系統比到b系統近,就把r1存入a中,反之把r2存入b中,然後把a中b中最大的加起來就可以了。兩個示例資料過了,但是wa了,因為這種想法是錯的,沒有考慮到一些情況,並且資料複雜。

題解:這一題可以定義乙個結構體存飛彈的座標和到兩個系統的距離平方r1, r2 然後根據r1從大到小排序,列舉,則存在k使得k+1到n都在第乙個系統的攔截範圍內,1到k-1則在第二個系統的攔截範圍內

#include#includeusing namespace std;

const int m = 100006, inf = 10000000;

struct tt[m];

int x_1, y_1, x_2, y_2;

int n;

int cmp(t a, t b)

int main()

sort(t+1, t+n+1, cmp);

int r2 = 0, ans = inf;

for(int i = 1; i<=n; i++)

cout<

return 0;

}

排序 簡單排序

氣泡排序 函式名 bubble sort 功能 實現公升序排序 引數 帶排序的陣列,陣列的長度 返回值 為空 描述 時間複雜度為o n 2 輔助空間為o 1 有一種變形的氣泡排序 雞尾酒排序,它是雙向的氣泡排序,時間複雜度也為o n 2 void bubble sort int bubble,int...

排序 簡單排序

一 氣泡排序 源 void bubble sort int array,int size array if flag 0 break 二 插入排序 原理 從第二個元素開始向前比較判斷,如果比前乙個元素小,則前乙個元素往後移動一位,直到第乙個元素或者前面條件不成立,將該元素插入當前位置。源 void ...

飛彈攔截2

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出...