NYOJ 12 噴水裝置(2)貪心之區間覆蓋問題

2021-06-23 05:31:27 字數 1043 閱讀 2105

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:4 描述

有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n(n<=10000)個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。

輸入第一行輸入乙個正整數n表示共有n次測試資料。

每一組測試資料的第一行有三個整數n,w,h,n表示共有n個噴水裝置,w表示草坪的橫向長度,h表示草坪的縱向長度。

隨後的n行,都有兩個整數xi和ri,xi表示第i個噴水裝置的的橫座標(最左邊為0),ri表示該噴水裝置能覆蓋的圓的半徑。

輸出每組測試資料輸出乙個正整數,表示共需要多少個噴水裝置,每個輸出單獨佔一行。

如果不存在一種能夠把整個草坪濕潤的方案,請輸出0。

樣例輸入

2

2 8 6

1 14 5

2 10 6

4 56 5

樣例輸出

1

2

這道題起初看起來不知道該怎麼下手,後來發現是個區間覆蓋的貪心問題,(1)首先需要想明白的乙個地方是 要將噴頭覆蓋的圓形部分轉化為乙個橫軸上對應的乙個區間,先把這個問題想明白。(2)然後所有有效的區間按左端點從小到大排序,就轉化為乙個區間覆蓋的問題;

#include #include #include #include using namespace std;

struct node

a[10100];

int cmp(node a,node b)

}sort(a,a+n,cmp);

double max=0;//比之前的sum多覆蓋的區間,不斷更新max,因為我希望覆蓋的越多越好

double sum=0;//當前已經覆蓋的區間

while(summax)

max=a[i].y-sum;

}if(max==0)

else

}if(!flag)cout<<0<

NYOJ 12 噴水裝置(二) 貪心)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...

NYOJ 12 噴水裝置(二)貪心

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...

NYOJ12 噴水裝置(二) 貪心

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...