description:
長\(l\)公尺,寬\(w\)公尺的草坪裡裝有\(n\)個澆灌噴頭。每個噴頭都裝在草坪中心線上(離兩邊各\(\frac\)公尺)。我們知道每個噴頭的位置(離草坪中心線左端的距離),以及它能覆蓋到的澆灌範圍。
請問:如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?
solution:
先預處理圓覆蓋矩形塊的左右邊界(勾股定理);
因為要盡量少選擇區間以覆蓋\(l\), 對區間按右邊界降序排列, 每次從左至右選擇能覆蓋當前右邊界的區間, 選不出則失敗;
可以對選過的區間打vis, 減少遍歷.
code:
#include#include#includeconst int maxn(15005);
struct range
double l, r;
bool vis;
bool operator < (const range& a)
};int main()
} std::sort(a, a + size);
if (a[0].r < l)
double rt(0.0);
int ans(0);
for(;;)
bool f = 1;
for (int i = 0; !a[i].vis && i < size; ++i)
}if (f)
} }}
LOJ 10002 噴水裝置
題目大意 給定一段區間 l,r n 條線段,求至少用多少條線段能夠覆蓋整個區間,不能覆蓋輸出 1。題解 每次在起點小於當前位置的線段集合中選擇有端點最大的位置作為下乙個位置,並更新答案,如果當前位置無法被更新,輸出 1。比較坑的一點是,輸入資料會有 r w 的情況,需要對線段下標加以處理。如下 in...
LOJ 10002 噴水裝置(貪心)
題目鏈結 題目描述 長 l公尺,寬 w 公尺的草坪裡裝有 n 個澆灌噴頭。每個噴頭都裝在草坪中心線上 離兩邊各 w 2 公尺 我們知道每個噴頭的位置 離草坪中心線左端的距離 以及它能覆蓋到的澆灌範圍。請問 如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?輸入格式 輸入包含若干組測試資料。第一行乙個整...
10002 噴水裝置
題目描述 長 l公尺,寬 w公尺的草坪裡裝有 n個澆灌噴頭。每個噴頭都裝在草坪中心線上 離兩邊各 w 2公尺 我們知道每個噴頭的位置 離草坪中心線左端的距離 以及它能覆蓋到的澆灌範圍。如果要同時澆灌整塊草坪,最少需要開啟多少個噴頭?題目鏈結 演算法 貪心 區間覆蓋問題。注意,半徑小於w 2的噴頭直接...