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

这里写图片描述
这里写图片描述

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

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

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

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

l=(2R)2D2

再使用 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]无线网络覆盖

posted @ 2016-01-31 02:18  BoilTask  阅读(9)  评论(0编辑  收藏  举报