wangluofugai

無線網絡覆蓋

時間限制:3000 ms  |  內存限制:65535 KB
難度: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
個人理解:根據題目要求,得到兩個條件,半徑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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章