NYOJ 噴水裝置(二)

2021-07-11 13:55:52 字數 1038 閱讀 8519

描述

有一塊草坪,橫向長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

咋一看好像挺麻煩的,其實就是乙個貪心演算法和線段覆蓋的題目。

下面貼**,內有注釋。

#include #include #include using namespace std;

struct point

water[10005];

bool cmp(point a, point b)

int main()

}sort(water, water+n, cmp); ///按照左交點從小到大排序

double max = 0;

double sum = 0;

while (sum < w) ///只要還沒覆蓋全就一直覆蓋

}if (max == 0) ///如果沒有就直接退出

else

}if (flag == 1)

printf("%d\n", counts);

else

printf("0\n");

}return 0;

}

NYOJ 噴水裝置 二 貪心

有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。第一行輸入乙個正整數n表示共有n次測試資料。每一組測試資料的第一行有三個...

nyoj 噴水裝置

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現有一塊草坪,長為20公尺,寬為2公尺,要在橫中心線上放置半徑為ri的噴水裝置,每個噴水裝置的效果都會讓以它為中心的半徑為實數ri 0 輸入 第一行m表示有m組測試資料 每一組測試資料的第一行有乙個整數數n,n表示共有n個噴水裝...

nyoj 12 噴水裝置(二)

這道題是一道典型的貪心,可以轉化為區間覆蓋問題。首先把圓的覆蓋轉化成線段,草坪轉化為定長線段。即轉化成直線上的線段覆蓋問題,就是求用最少的線段數把整個區域都覆蓋了,不能覆蓋的輸出0。這道題做的有點慢,主要是細節沒注意好。用了好幾個測試資料才改正過來的。我的錯主要是處在len的計算上了,沒注意到len...