NYOJ 12 噴水裝置(二)

2021-06-22 19:43:17 字數 532 閱讀 9471

此題應轉化為區間覆蓋問題,數軸上有 n 個閉區間 [ai, bi],選盡量少的區間覆蓋一條指定線段 [s, t]。

掃瞄結果:

1. 線段上有的區間覆蓋不到,則無法完成覆蓋,跳出掃瞄迴圈;

2. 選擇能覆蓋到 sum 位置且最長的閉區間,用它來覆蓋,貪心,保證選的區間少,sum += q[i].b - sum。

**如下:

#include#include#include#includeusing namespace std;

const int maxn = 10000 + 5;

int x[maxn], r[maxn];

struct qu

q[maxn];

bool cmp(qu a, qu b) //按 b 公升序排列

int main()

}if(s == 0)

if(len == 0) //有的區間覆蓋不到

sum += len; //覆蓋位置後移

cnt ++; //裝置數增加

}cout <

nyoj 12 噴水裝置(二)

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

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的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...