ZZU第四届程序设计大赛 2-无线网络覆盖

http://acm.nyist.net/JudgeOnline/problem.php?pid=199

 

2.无线网络覆盖
我们的乐乐同学对于网络可算得上是情有独钟,他有一个计划,那就是用无线网覆盖郑
州大学。
现在学校给了他一个机会,因此他要购买很多的无线路由。现在他正在部署某条大道的
网络,而学校只允许把他的无线路由器放在路的正中间。我们默认这条大道是笔直的并且它
在任何地方的宽度都一样。并且所有的路由器的覆盖面积是相同的。现在乐乐计算出这条大
道的长和宽,以及路由器的覆盖半径,想起你帮忙帮他计算出他最少要购买的路由器的数量。
注意:为了防止某种干扰,两台无限路由之间的最小距离不能小于1 米。
图1 中为一条矩形的道路,中间的虚线代表中线。图2 为最小覆盖的示意图。


Input
输入包括多组测试数据:
第一部分:一个整数T(1<=T<=500)。
第二部分:一共T 行,每行包括三个整数L,D,R 代表路的长,宽和覆盖半径(米)。
(1<=L<=100000),(1<=D<=50),(1<=R<=200)。
Output
对于每组测试数据输出各占一行,只有一个整数,表示最少的路由器数量。如果不能覆盖,请输出impossible

Input

 2
40 6 5

Output

5
impossible

算法很简单,但是总是wa~刚开始以为算法错了,怎么都检查不出来~~后来把int改成了double型的,就AC了~~很郁闷~~~~

 1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 int tcases;
6 double len, wide, radius, lp;
7 int count;
8 scanf("%d", &tcases);
9 while(tcases--)
10 {
11 scanf("%lf%lf%lf", &len, &wide, &radius);
12 if(radius <= wide / 2)
13 {
14 printf("impossible\n");
15 continue;
16 }
17 lp = 2.0 * sqrt(radius*radius - wide*wide/4);
18 for(count = 0; ; count++)
19 {
20 if(count * lp >= len)
21 {
22 printf("%d\n", count);
23 break;
24 }
25 }
26 }
27 return 0;
28 }

 

posted @ 2011-12-17 17:46  枫萧萧  阅读(556)  评论(3编辑  收藏  举报