【NYOJ】[1198]无线网络覆盖

文章字数:253

问题描述

无线网络覆盖

问题分析

乍一看有点难
但仔细想一想
题目还是挺简单的
一些限制条件在那呢

规定路由器只能在中间
所以要求直径需大于宽

同时 R>=1 D>=1 L>=1 保证了 只要直径大于宽 那么就一定有结果

所用路由器个数取决与于边缘的长度
既等于图中左下角到下方两圆交点的那一段长度

$$ l = \sqrt{(2R)^2 - D^2}$$

再使用 ceil() 来向上取整数
所以代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#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;
}

标程可以说和我一样了~
嗯……
或许应该说我和标程一样~
哈哈哈 无所谓啦

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#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");
	}
}

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...