題目鏈結
題目描述
長 l公尺,寬 w 公尺的草坪裡裝有 n 個澆灌噴頭。每個噴頭都裝在草坪中心線上(離兩邊各 w/2 公尺)。我們知道每個噴頭的位置(離草坪中心線左端的距離),以及它能覆蓋到的澆灌範圍。
請問:如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?
輸入格式
輸入包含若干組測試資料。
第一行乙個整數 t 表示資料組數;
每組資料的第一行是整數 n、l 和 w;
接下來的 n 行,每行包含兩個整數,給出乙個噴頭的位置和澆灌半徑(上面的示意圖是樣例輸入第一組資料所描述的情況)。
輸出格式
對每組測試資料輸出乙個數字,表示要澆灌整塊草坪所需噴頭數目的最小值。如果所有噴頭都開啟也不能澆灌整塊草坪,則輸出 −1 。
樣例樣例輸入
3
8 20 2
5 34 1
1 27 2
10 2
13 3
16 2
19 4
3 10 1
3 59 3
6 13 10 1
5 31 1
9 1
樣例輸出
6
2-1
資料範圍與提示
對於 100% 的資料,n≤15000。
將噴頭噴水的有效範圍求出來並過濾掉噴水直徑小於草坪寬的噴頭。
該圖**於
然後可以將問題轉化為區間完全覆蓋問題。等價於給定乙個長度為m的區間,再給出n條線段的起點和終點(注意這裡是閉區間),求最少使用多少條線段可以將整個區間完全覆蓋。
將每乙個區間按照左端點遞增順序排列,這裡貪心的策略是每次在可選線段裡選取右端點最大的,直至完全覆蓋。
ac**:
#include#include#include#include#include#include#includeusing namespace std;
int main()
t=max_r;
ans++;
} if(flag) cout<
else cout<
}}
LOJ 10002 噴水裝置
題目大意 給定一段區間 l,r n 條線段,求至少用多少條線段能夠覆蓋整個區間,不能覆蓋輸出 1。題解 每次在起點小於當前位置的線段集合中選擇有端點最大的位置作為下乙個位置,並更新答案,如果當前位置無法被更新,輸出 1。比較坑的一點是,輸入資料會有 r w 的情況,需要對線段下標加以處理。如下 in...
Loj 10002 噴水裝置
description 長 l 公尺,寬 w 公尺的草坪裡裝有 n 個澆灌噴頭。每個噴頭都裝在草坪中心線上 離兩邊各 frac 公尺 我們知道每個噴頭的位置 離草坪中心線左端的距離 以及它能覆蓋到的澆灌範圍。請問 如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?solution 先預處理圓覆蓋矩形塊...
10002 噴水裝置
題目描述 長 l公尺,寬 w公尺的草坪裡裝有 n個澆灌噴頭。每個噴頭都裝在草坪中心線上 離兩邊各 w 2公尺 我們知道每個噴頭的位置 離草坪中心線左端的距離 以及它能覆蓋到的澆灌範圍。如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?題目鏈結 演算法 貪心 區間覆蓋問題。注意,半徑小於w 2的噴頭直接...