題意
經過 11年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為 0時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷:每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。
某天,雷達捕捉到敵國的飛彈來襲。由於該系統尚處於試驗階段,所以只有兩套系統投入工作。如果現在的要求是攔截所有的飛彈,請計算這一天的最小使用代價。
第一行包含 4個整數 x1、y1、x2、y2,每兩個整數之間用乙個空格隔開,表示這兩套飛彈攔截系統的座標分別為(x1, y1)、(x2, y2)。
第二行包含 1個整數 n,表示有 n顆飛彈。接下來 n行,每行兩個整數 x、y,中間用乙個空格隔開,表示一顆飛彈的座標(x, y)。不同飛彈的座標可能相同。
想法:
首先 第一眼看到普及組的題....就總想著用貪心來騙資料。。。。後來發現 真是貪心就能解決的 雖然比較簡單
其實只需要按照乙個飛彈攔截系統a的距離排序
講離a最近的i個飛彈都交給a
其餘的交給b
然後倒序列舉更新答案
當然這需要過載運算子或者...手寫乙個 cmp
這基本就a了
所以下面是**
#include
#include
#include
#include
using
namespace
std;
#define inf 0x3fffff
#define maxn 100000+5
int n,x1,y1,x2,y2;
int mn=inf,rb;
inline
int read()
while (ch >= '0' && ch <= '9')
return x * f;
}struct data
;data a[maxn];
bool cmp(data a,data b)
sort(a+1,a+n+1,cmp);
for(int i=n;i>0;--i)
rb=max(a[i+1].s2,rb),mn=min(mn,a[i].s1+rb);
cout
《那麼這道簡單的貪心就算解決了
NOIP 2010 飛彈攔截
題目描述 經過 11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為 0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。某...
noip2010 飛彈攔截
經過11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。某天,雷達捕捉到...
noip2010飛彈攔截
洛谷的題。在此省略題目。這題還是比較水的。開始想用字首s1和與字尾s2和做。後來發現是不是。沒辦法還是自己太菜了。其實這道題很簡單。就是給兩個點,然後一系列的點,問以這兩個點為圓心的半徑平方後之和最小是多少。我們可以用結構體排序做。用乙個結構體陣列a i s1和a i s2如下 struct dra...