如下圖所示,對於任意乙個小島 (x,y),我們都可以在海岸線上求出能覆蓋該小島的建造雷達的區間 [a,b]。
由勾股定理可知
將所有小島轉化成區間後,問題轉化為:給定 n 個區間,在 x 軸上選擇盡量少的點,使得所有區間至少包含乙個點。
演算法步驟:
將所以區間按右端點從小到大排序;
依次考慮每個區間:
證明:首先上述做法一定可以保證所有區間至少包含乙個點:
然後我們再證明這樣選出的點的數量是最少的,不妨設選出的點數為m:
所以我們找到了m個兩兩之間沒有交集的區間,因此我們至少需要選m個點。而且通過上述做法,我們可以只選m個點。因此最優解為m。
計算每個座標所對應的區間,需要o(n)的計算量。
將所有區間排序需要o(nlogn)的計算量。
掃瞄所有區間需要o(n)的計算量;
所以總共的時間複雜度為o(nlogn).
#includeusing namespace std;
typedef pairpdd;
const int n = 1010;
const double eps = 1e-6, inf = 1e10;
int n, d;
pdd seg[n];
int main()
auto len = sqrt(d * d - y * y);
seg[i] = ;
}if(!success)
puts("-1");
else
}cout << res << endl;
}return 0;
}
112 雷達裝置
海岸上有雷達可以輻射以d為半徑的半圓區域,海岸之外還有島嶼,要求用最少的雷達個數覆蓋所有的島嶼。一開始畫圖的時候,一直是畫雷達的輻射範圍去想怎麼貪心使得覆蓋面積最大,一直卡著,其實可以換個角度,從島嶼的角度考慮雷達的區域只要以島嶼為中心的圓與海岸線的相交線 下圖ab 中有乙個雷達即可,所以問題就轉化...
AcWing 112 雷達裝置
原題鏈結 考察 貪心 一開始的思路是兩兩小島構造乙個半徑為d的 沒做出來,的交集太難求.思路 這道題的思路不是每個雷達覆蓋盡可能多的島,而是每個島能被x軸上哪些點覆蓋.對於每個島求出它在x軸被覆蓋的最小座標和最大座標,這樣形成的區間就是能覆蓋該島的座標區間.這樣就轉化成區間選點問題.1 includ...
貪心 acwing 112 雷達裝置
題目 假設海岸是一條無限長的直線,陸地位於海岸的一側,海洋位於另外一側。每個小島都位於海洋一側的某個點上。雷達裝置均位於海岸線上,且雷達的監測範圍為d,當小島與某雷達的距離不超過d時,該小島可以被雷達覆蓋。我們使用笛卡爾座標系,定義海岸線為x軸,海的一側在x軸上方,陸地一側在x軸下方。現在給出每個小...