有n
nn個建築物,第i
ii個建築物在笛卡爾座標系上的座標為(xi
,yi)
(x_i,y_i)
(xi,y
i),你需要在x
xx軸上安裝一些雷達,每個雷達的偵察半徑均為d
dd,要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。
第一行兩個正整數n,d
n,dn,
d。接下來n
nn行,第i
ii行兩個整數xi,
yi
x_i,y_i
xi,yi
。輸出一行表示答案,若沒有解決方案,則答案為−1-1
−1。sam
pl
esample
sample
i np
ut
input
inpu
t
3 2
1 2-3 1
2 1
s am
pl
esample
sample
o ut
pu
toutput
output
2
對於100
%100\%
100%
的資料,有1≤n
≤103
1\leq n\leq 10^3
1≤n≤10
3 。貪心
#include
#include
#include
#include
#include
#define dou double
using
namespace std;
struct wh_
a[1250];
int x, y, n, m, ans =1;
bool
nm(wh_ i, wh_ j)
intmain()
a[i]
.x =
(dou)x -
(dou)
sqrt
(m * m - y * y)
; a[i]
.y =
(dou)x +
(dou)
sqrt
(m * m - y * y);}
sort
(a +
1, a + n +
1, nm)
; dou k = a[1]
.y;for
(int i =
2; i <= n;
++i)
if(k < a[i]
.x)printf
("%d"
, ans)
;return0;
}
YbtOJ高效高階 貪心 2 雷達裝置
ybtoj高效高階 貪心 2 有n nn個建築物,第i ii個建築物在笛卡爾座標系上的座標為 xi yi x i,y i xi y i 你需要在x xx軸上安裝一些雷達,每個雷達的偵察半徑均為d dd 要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。3 2 1 2 3 1 2 12每個點...
112 雷達裝置
海岸上有雷達可以輻射以d為半徑的半圓區域,海岸之外還有島嶼,要求用最少的雷達個數覆蓋所有的島嶼。一開始畫圖的時候,一直是畫雷達的輻射範圍去想怎麼貪心使得覆蓋面積最大,一直卡著,其實可以換個角度,從島嶼的角度考慮雷達的區域只要以島嶼為中心的圓與海岸線的相交線 下圖ab 中有乙個雷達即可,所以問題就轉化...
112 雷達裝置
如下圖所示,對於任意乙個小島 x,y 我們都可以在海岸線上求出能覆蓋該小島的建造雷達的區間 a,b 由勾股定理可知 將所有小島轉化成區間後,問題轉化為 給定 n 個區間,在 x 軸上選擇盡量少的點,使得所有區間至少包含乙個點。演算法步驟 將所以區間按右端點從小到大排序 依次考慮每個區間 證明 首先上...