噴水裝置(二)

2021-07-24 13:41:09 字數 1544 閱讀 5990

噴水裝置(二)

時間限制: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

主要思路就是在既能夠保證兩點有公共區域的情況下又能保證能夠往右覆蓋的面積最大,也就是右交點最大。

#include #include #include using namespace std;

const int maxn = 10000 + 10;

struct p

p[maxn];

int t, n, w, h, x, r, ans, flag;

double len, sum, max1;

int cmp(p a, p b)

int main()

sort(p, p + n, cmp);

while (sum < w)

if (max1 == 0)

else

}if (flag)

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

else

printf("0\n");

}return 0;

}
#include #include #include using namespace std;

const int maxn = 10000 + 10;

struct p

p[maxn];

int t, n, w, h, x, r, ans, flag;

double len, sum, max1;

int cmp(p a, p b)

int main()

sort(p, p + n, cmp);

p[n].left=0x7fffffff;

int t=-1,temp=0,ans=0;

bool f=0;

for (int i=0;it+1 && f)

t=temp,++ans,f=0;

}if (t

噴水裝置 二

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

噴水裝置(二)

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

噴水裝置(二)

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