1. 程式人生 > >nyoj 199-無線網絡覆蓋 (ceil())

nyoj 199-無線網絡覆蓋 (ceil())

-o 並且 main ssi 0ms sta ear bsp orange

199-無線網絡覆蓋


內存限制:64MB 時間限制:3000ms 特判: No
通過數:4 提交數:13 難度:3

題目描述:

我們的樂樂同學對於網絡可算得上是情有獨鐘,他有一個計劃,那就是用無線網覆蓋鄭州大學。

現在學校給了他一個機會,因此他要購買很多的無線路由。現在他正在部署某條大道的網絡,而學校只允許把他的無線路由器放在路的正中間。我們默認這條大道是筆直的並且它在任何地方的寬度都一樣。並且所有的路由器的覆蓋面積是相同的。現在樂樂計算出這條大道的長和寬,以及路由器的覆蓋半徑,想請你幫忙,幫他計算出他最少要購買的路由器的數量。

註意:為了防止某種幹擾,兩臺無線路由之間的最小距離不能小於1米技術分享圖片

圖1中為一條矩形的道路,中間的虛線代表中線。圖2為最小覆蓋的示意圖。

輸入描述:

輸入包括多組測試數據
第一部分:一個整數T(1<=T<=500)
第二部分:一共T行,每行包括三個整數L,D,R代表路的長,寬和覆蓋半徑(米)。
(1<=L<=100000),(1<=D<=50),(1<=R<=200)。

輸出描述:

對於每組測試數據輸出各占一行,只有一個整數,表示最少的路由器數量。如果不能覆蓋,請輸出impossible

樣例輸入:

2
40 6 5
40 10 5

樣例輸出:

5
impossible

C/C++ AC:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <set>
 8 #include <map>
 9 #include <queue>
10
#include <climits> 11 12 using namespace std; 13 int n; 14 15 int main() 16 { 17 cin >> n; 18 while (n --) 19 { 20 double L, D, R; 21 cin >>L >> D >>R; 22 if (R <= D / 2) 23 { 24 cout <<"impossible" <<endl; 25 continue; 26 } 27 double temp = 2 * sqrt(R * R - (D/2) * (D/2)); 28 if (temp < 1) 29 { 30 cout <<"impossible" <<endl; 31 continue; 32 } 33 cout <<ceil(L / temp) <<endl; 34 } 35 }

nyoj 199-無線網絡覆蓋 (ceil())