海岸上有雷達可以輻射以d為半徑的半圓區域,海岸之外還有島嶼,要求用最少的雷達個數覆蓋所有的島嶼。
一開始畫圖的時候,一直是畫雷達的輻射範圍去想怎麼貪心使得覆蓋面積最大,一直卡著,其實可以換個角度,從島嶼的角度考慮雷達的區域只要以島嶼為中心的圓與海岸線的相交線(下圖ab)中有乙個雷達即可,所以問題就轉化為在所有這樣的ab區域內都有乙個點,總的點數目還要最少。
貪心策略:
將所有區間(ab)按右端點從小到大排序;
依次考慮每個區間:
如果當前區間包含最後乙個選擇的點,則直接跳過;
如果當前區間不包含最後乙個選擇的點,則在當前區間的右端點的位置選乙個新的點;
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
1e5+10;
typedef pair<
double
,double
>pdd;
pdd seg[maxn]
;int
main()
;}if(
!flag) cout<<
"-1"
<
else
} cout<
}}
112 雷達裝置
如下圖所示,對於任意乙個小島 x,y 我們都可以在海岸線上求出能覆蓋該小島的建造雷達的區間 a,b 由勾股定理可知 將所有小島轉化成區間後,問題轉化為 給定 n 個區間,在 x 軸上選擇盡量少的點,使得所有區間至少包含乙個點。演算法步驟 將所以區間按右端點從小到大排序 依次考慮每個區間 證明 首先上...
AcWing 112 雷達裝置
原題鏈結 考察 貪心 一開始的思路是兩兩小島構造乙個半徑為d的 沒做出來,的交集太難求.思路 這道題的思路不是每個雷達覆蓋盡可能多的島,而是每個島能被x軸上哪些點覆蓋.對於每個島求出它在x軸被覆蓋的最小座標和最大座標,這樣形成的區間就是能覆蓋該島的座標區間.這樣就轉化成區間選點問題.1 includ...
貪心 acwing 112 雷達裝置
題目 假設海岸是一條無限長的直線,陸地位於海岸的一側,海洋位於另外一側。每個小島都位於海洋一側的某個點上。雷達裝置均位於海岸線上,且雷達的監測範圍為d,當小島與某雷達的距離不超過d時,該小島可以被雷達覆蓋。我們使用笛卡爾座標系,定義海岸線為x軸,海的一側在x軸上方,陸地一側在x軸下方。現在給出每個小...