題目描述在乙個長 l
ll 公尺,寬 w
ww 公尺的草坪裡裝有 n
nn 個澆灌噴頭。
每個噴頭都裝在草坪中心線上 (離兩邊各 w
2\frac w 2
2w 公尺)
我們知道每個噴頭的位置 c
cc (離草坪中心線左端的距離),以及它能覆蓋到的澆灌範圍 rrr。
請問:最少需要開啟多少個噴頭才能澆灌整塊草坪?
輸入格式輸入包含若干組測試資料。
第一行乙個整數 t
tt,表示資料的組數;
每組資料的第一行是整數 n
nn、l
ll 和 www;
接下來的 行,每行包含兩個整數,給出乙個噴頭的位置和澆灌半徑 (上面的示意圖是樣例輸入第一組資料所描述的情況)。
輸出格式對每組測試資料輸出乙個數字,表示為澆灌整塊草坪所需噴頭數目的最小值。
如果所有噴頭都開啟也不能澆灌整塊草坪,則輸出 −1-1
−1。
樣例樣例輸入
38 20 2
5 34 1
1 27 2
10 2
13 3
16 2
19 4
3 10 1
3 59 3
6 13 10 1
5 31 1
9 1樣例輸出62
-1
資料範圍對於 100
100%
100 的資料,n
<
=15000
n <= 15000
n<=1
5000
。
提示對於任意乙個噴水裝置,它能噴灑到的區域是乙個已知半徑的圓形。貪心
但是噴灑到草坪上的區域,則是近似乙個矩形的。
這個矩形就是圓形與草坪的四個交點所圍成的矩形。 (在這裡兔兔不方便畫圖,就需要讀者自己在草稿本上畫圖了)
我們可以求出每個噴水裝置在草坪上噴灑的區域 (之前所說的矩形) 的左端點和右端點。
然後在所有左端點小於上乙個區間右端點的區域中選擇右端點最大的乙個噴水裝置。
剩下的分析,兔兔就附在**上了哦~
下面是正解** (請讀者不要抄襲哦~):
#include
#include
#include
using
namespace std;
const
int maxn =
15005
;int t;
int n, l, w;
struct node p[maxn]
;int cnt;
intmain()
int ans =0;
double maxr =
0.0;
bool check =0;
while
(maxr < l)
++ans;}if
(check)
printf
("-1");
else
printf
("%d"
, ans)
;printf
("\n");
}}return0;
}
兔兔 的 題解 Teamwork
區間最值 題目背景 在 f ar me rfarmer farmer j oh njohn john 最喜歡的節日裡,他想要給他的朋友們贈送一些禮物。由於他並不擅長包裝禮物,他想要獲得他的奶牛們的幫助。你可能能夠想到,奶牛們也不是很擅長包裝禮物,而 far me rfarmer farmer j o...
兔兔 的 題解 最短路計數
題目描述 給出乙個 n nn 個頂點 m mm 條邊的無向無權圖,頂點編號為 1 11 nnn。問從頂點 1 11 開始,到其他每個點的最短路有幾條。輸入格式 第一行包含 2 22 個正整數 n,m n,m n,m,為圖的頂點數與邊數。接下來 m mm 行,每行兩個正整數 x,y x,y x,y,表...
兔兔 的 題解 拆分自然數
題目描述 任何乙個大於 1 11 的自然數 n n 45 n n 45 n n 45 總可以拆分成若干個小於 n nn 的自然數之和。輸入格式 輸入只有 1 11 行,包含 1 11 個整數 n nn 表示需要拆分的數字。輸出格式 對於輸入的 n nn 輸出所有的拆分方法 字典 序小的先 輸出 字典...