無線網絡覆蓋
- 描述
-
我們的樂樂同學對於網絡可算得上是情有獨鍾,他有一個計劃,那就是用無線網覆蓋鄭州大學。
現在學校給了他一個機會,因此他要購買很多的無線路由。現在他正在部署某條大道的網絡,而學校只允許把他的無線路由器放在路的正中間。我們默認這條大道是筆直的並且它在任何地方的寬度都一樣。並且所有的路由器的覆蓋面積是相同的。現在樂樂計算出這條大道的長和寬,以及路由器的覆蓋半徑,想請你幫忙,幫他計算出他最少要購買的路由器的數量。
注意:爲了防止某種干擾,兩臺無線路由之間的最小距離不能小於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
個人理解:根據題目要求,得到兩個條件,半徑R大於寬度D的1/2,同時兩臺無線路由器的距離不能小於1;用到了ceil,當路由器臺數正好爲整數,得出其值,如果不是整數,就加1.結果 時間 內存 語言 Accepted 0 240 C #include<stdio.h> #include<math.h>//下面用到了sqrt; int main() { int T; scanf("%d",&T); int i; double m,n; for(i=1;i<=T;i++) { int L,D,R; scanf("%d %d %d",&L,&D,&R); m=sqrt(R*R-((D*D)/4.0)); if(R>D/2.0||2*m>=1.0)//兩個判斷條件; { n=L/(2*m); printf("%d\n",(int)ceil(n)); } else printf("impossible\n"); } return 0; }