乍一看有点难
但仔细想一想
题目还是挺简单的
一些限制条件在那呢
规定路由器只能在中间
所以要求直径需大于宽
同时 R>=1 D>=1 L>=1 保证了 只要直径大于宽 那么就一定有结果
所用路由器个数取决与于边缘的长度
既等于图中左下角到下方两圆交点的那一段长度
再使用 ceil() 来向上取整数
所以代码如下
#include<stdio.h>
#include<math.h>
int main() {
int T;
scanf("%d",&T);
while(T--) {
double L,D,R;
scanf("%lf %lf %lf",&L,&D,&R);
if(2*R<=D)
printf("impossible\n");
else
printf("%.lf\n",ceil(L/sqrt(4*R*R-D*D)));
}
return 0;
}
标程可以说和我一样了~
嗯……
或许应该说我和标程一样~
哈哈哈 无所谓啦
#include<stdio.h>
#include<math.h>
int main() {
int T;
double L,D,R,a;
scanf("%d",&T);
while(T--) {
scanf("%lf%lf%lf",&L,&D,&R);
a=4*R*R-D*D;
if(a>0)printf("%.0lf\n",ceil(L/sqrt(a)));
else puts("impossible");
}
}
题目地址:【NYOJ】[199]无线网络覆盖