noip2010 飛彈攔截 vijos1810

2021-08-03 21:44:22 字數 1691 閱讀 7888

經過11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷:每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。 某天,雷達捕捉到敵國的飛彈來襲。由於該系統尚處於試驗階段,所以只有兩套系統投入工作。如果現在的要求是攔截所有的飛彈,請計算這一天的最小使用代價。

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

第二行包含1 個整數n(1 ≤ n ≤ 100000)。表示有n 顆飛彈。

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

所有座標分量的絕對值都不超過1000。

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

0 0 10 0 

2 -3 3

10 0

copy

18

copy

0 0 6 0 

5 -4 -2

-2 3

4 0

6 -2

9 1copy

30

copy

每個測試點1s。

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

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

樣例1說明:

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

樣例2說明:

樣例中的飛彈攔截系統和飛彈所在的位置如下圖所示。要攔截所有飛彈,在滿足最小使用代價的前提下,兩套系統工作半徑的平方分別為20 和10。

noip2010普及組

這種最終答案受兩個因素影響的題目

想到列舉(二分)乙個因素,然後再暴力求另乙個因素

即列舉乙個系統的半徑(注意到座標絕對值範圍不超過1000)

我剛開始想到了這個方法

但我想的是每一次列舉後都掃瞄一遍

這樣的複雜度是會爆的

看了題解之後才發現列舉乙個因素的時候

因為是連續列舉嘛

所以另乙個因素的變化也是連續的(即隨著乙個系統的半徑的增大,它能覆蓋到的點就會增加,而需要另乙個系統覆蓋的點就減少這幾個)

因此想到要把點按離這個系統中心的距離排序

發現如果是遞增的話

另乙個系統取最大值不能o(1)處理

所以想到要遞減

這樣另乙個系統的最大值就好辦了

傻了傻了

吸取經驗(總是傻在這種地方)

#include#include#include#includestruct node

e[100005];

bool cmp(node a,node b)

{ return a.dis1=1;i--)

{ max=max>e[i+1].dis2?max:e[i+1].dis2;

min=min

NOIP 2010 飛彈攔截

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

noip2010 飛彈攔截

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

noip2010飛彈攔截

洛谷的題。在此省略題目。這題還是比較水的。開始想用字首s1和與字尾s2和做。後來發現是不是。沒辦法還是自己太菜了。其實這道題很簡單。就是給兩個點,然後一系列的點,問以這兩個點為圓心的半徑平方後之和最小是多少。我們可以用結構體排序做。用乙個結構體陣列a i s1和a i s2如下 struct dra...