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