題目:
假設海岸是一條無限長的直線,陸地位於海岸的一側,海洋位於另外一側。
每個小島都位於海洋一側的某個點上。
雷達裝置均位於海岸線上,且雷達的監測範圍為d,當小島與某雷達的距離不超過d時,該小島可以被雷達覆蓋。
我們使用笛卡爾座標系,定義海岸線為x軸,海的一側在x軸上方,陸地一側在x軸下方。
現在給出每個小島的具體座標以及雷達的檢測範圍,請你求出能夠使所有小島都被雷達覆蓋所需的最小雷達數目。
輸入格式
第一行輸入兩個整數n和d,分別代表小島數目和雷達檢測範圍。
接下來n行,每行輸入兩個整數,分別代表小島的x,y軸座標。
同一行資料之間用空格隔開。
輸出格式
輸出乙個整數,代表所需的最小雷達數目,若沒有解決方案則所需數目輸出「-1」。
資料範圍
1≤n≤1000
輸入樣例:
3 21 2
-3 1
2 1輸出樣例:
2題解:
若 從雷
達角度考
慮能夠每
個雷達能
夠覆蓋的
小島數量
,顯然是
行不通的
。若從雷達角度考慮能夠每個雷達能夠覆蓋的小島數量,顯然是行不通的。
若從雷達角度
考慮能夠
每個雷達
能夠覆蓋
的小島數
量,顯然
是行不通
的。 從小島
角度考慮
,統計每
個小島可
以被覆蓋
到的區間
,從第一
個區間開
始向後考
慮,使得
重複的區
間盡量多
,最後統
計雷達數
量。從小島角度考慮,統計每個小島可以被覆蓋到的區間,從第乙個區間開始向後考慮,\\使得重複的區間盡量多,最後統計雷達數量。
從小島角度考
慮,統計
每個小島
可以被覆
蓋到的區
間,從第
乙個區間
開始向後
考慮,使
得重複的
區間盡量
多,最後
統計雷達
數量。
將 每個
區間按右
端點進行
排序,對
第i個區
間的右端
點考慮(
即能夠被
覆蓋第i
個小島的
最後乙個
位置),
初始化l
ast=
ri,若
第i個區
間右端點
ri>=第
j個區間
的左端點
lj(j
>i)
,說明同
乙個雷達
可以覆蓋
小島i和
j,以及
i到j之
間的小島
;若ri
,說明小
島i,j
無法用同
一雷達覆
蓋,則l
ast=
rj。將每個區間按右端點進行排序,對第i個區間的右端點考慮(即能夠被覆蓋第i個小島的最後乙個位置),\\初始化last=r_i,若第i個區間右端點r_i>=第j個區間的左端點l_j(j>i),說明同乙個雷達可以覆蓋小島i和j,\\以及i到j之間的小島;若r_i將每
個區間按
右端點進
行排序,
對第i個
區間的右
端點考慮
(即能夠
被覆蓋第
i個小島
的最後一
個位置)
,初始化
last
=ri
,若第i
個區間右
端點ri
>=第
j個區間
的左端點
lj(
j>i)
,說明同
乙個雷達
可以覆蓋
小島i和
j,以及
i到j之
間的小島
;若ri
,說明
小島i,
j無法用
同一雷達
覆蓋,則
last
=rj
。 貪 心思
想的體現
:考慮當
前每乙個
區間右端
點都要覆
蓋最多的
左端點。
貪心思想的體現:考慮當前每乙個區間右端點都要覆蓋最多的左端點。
貪心思想的體
現:考慮
當前每一
個區間右
端點都要
覆蓋最多
的左端點
。**:
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x7fffffff
using
namespace std;
struct seg
}s[1010];
int n,d;
int maxy;
//記錄縱座標最大值
int ans;
intmain()
s[i]
.l=x-
sqrt
(d*d-y*y)
,s[i]
.r=x+
sqrt
(d*d-y*y);}
sort
(s+1
,s+n+1)
;double last=
-inf;
for(
int i=
1;i<=n;i++)if
(last
.l) cout<
return0;
}
AcWing 112 雷達裝置
原題鏈結 考察 貪心 一開始的思路是兩兩小島構造乙個半徑為d的 沒做出來,的交集太難求.思路 這道題的思路不是每個雷達覆蓋盡可能多的島,而是每個島能被x軸上哪些點覆蓋.對於每個島求出它在x軸被覆蓋的最小座標和最大座標,這樣形成的區間就是能覆蓋該島的座標區間.這樣就轉化成區間選點問題.1 includ...
112 雷達裝置
海岸上有雷達可以輻射以d為半徑的半圓區域,海岸之外還有島嶼,要求用最少的雷達個數覆蓋所有的島嶼。一開始畫圖的時候,一直是畫雷達的輻射範圍去想怎麼貪心使得覆蓋面積最大,一直卡著,其實可以換個角度,從島嶼的角度考慮雷達的區域只要以島嶼為中心的圓與海岸線的相交線 下圖ab 中有乙個雷達即可,所以問題就轉化...
112 雷達裝置
如下圖所示,對於任意乙個小島 x,y 我們都可以在海岸線上求出能覆蓋該小島的建造雷達的區間 a,b 由勾股定理可知 將所有小島轉化成區間後,問題轉化為 給定 n 個區間,在 x 軸上選擇盡量少的點,使得所有區間至少包含乙個點。演算法步驟 將所以區間按右端點從小到大排序 依次考慮每個區間 證明 首先上...