原題鏈結
考察:貪心
一開始的思路是兩兩小島構造乙個半徑為d的⚪,沒做出來,⚪的交集太難求.
思路:這道題的思路不是每個雷達覆蓋盡可能多的島,而是每個島能被x軸上哪些點覆蓋.對於每個島求出它在x軸被覆蓋的最小座標和最大座標,這樣形成的區間就是能覆蓋該島的座標區間.這樣就轉化成區間選點問題.
1 #include 2 #include 3 #include 4using
namespace
std;
5const
int n = 1010
;6 typedef pairpii;
7pii p[n];
8struct
road
14}road[n];
15int
main()
1623
int t = d*d-p[i].second*p[i].second;
24 road[i].l = p[i].first-sqrt(t);
25 road[i].r = p[i].first+sqrt(t);26}
27 sort(road+1,road+n+1
);28
double ed = -9999999999999;29
for(int i=1;i<=n;i++)
30if(road[i].l>ed) ed = road[i].r,ans++;
31 printf("
%d\n
",ans);
32return0;
33 }
貪心 acwing 112 雷達裝置
題目 假設海岸是一條無限長的直線,陸地位於海岸的一側,海洋位於另外一側。每個小島都位於海洋一側的某個點上。雷達裝置均位於海岸線上,且雷達的監測範圍為d,當小島與某雷達的距離不超過d時,該小島可以被雷達覆蓋。我們使用笛卡爾座標系,定義海岸線為x軸,海的一側在x軸上方,陸地一側在x軸下方。現在給出每個小...
112 雷達裝置
海岸上有雷達可以輻射以d為半徑的半圓區域,海岸之外還有島嶼,要求用最少的雷達個數覆蓋所有的島嶼。一開始畫圖的時候,一直是畫雷達的輻射範圍去想怎麼貪心使得覆蓋面積最大,一直卡著,其實可以換個角度,從島嶼的角度考慮雷達的區域只要以島嶼為中心的圓與海岸線的相交線 下圖ab 中有乙個雷達即可,所以問題就轉化...
112 雷達裝置
如下圖所示,對於任意乙個小島 x,y 我們都可以在海岸線上求出能覆蓋該小島的建造雷達的區間 a,b 由勾股定理可知 將所有小島轉化成區間後,問題轉化為 給定 n 個區間,在 x 軸上選擇盡量少的點,使得所有區間至少包含乙個點。演算法步驟 將所以區間按右端點從小到大排序 依次考慮每個區間 證明 首先上...