OJ 1164 求上网

描述

小明是一个ACM爱好者,某天他和小伙伴们在外面玩耍,突然,他想起来今天是ACM世界总决赛的日子,而且比赛马上就要开始了,小明十分想看比赛的视频直播,于是马上掏出自己的小平板准备连WIFI看直播。
现在给你小明的位置和若干WIFI热点的位置及每个热点的覆盖半径,请你判断小明所在的位置能不能连上网。

输入
输入包含多组测试数据。
每组第一行输入一个整数n(0<=n<=100),表示WIFI热点的个数。当n=0时,输入结束。
接下来n行,每行输入3个浮点数x,y,r(-500<=x,y<=500,0<r<=500),表示一个WIFI热点的坐标位置和覆盖半径,可能会有热点重合。
每组最后一行再输入两个浮点数a和b(-500<=a,b<=500),表示小明的坐标位置,可能会和WIFI热点的坐标重合。

输出
对于每组输入,如果小明所在的位置能连上网,则输出“YES”,否则输出“NO”。


输入样例 1

2
-1.00 1.00 1.00
2.00 1.00 1.00
0.51 0.88
3
0.00 0.00 1.00
1.00 1.00 1.00
-5.00 3.00 3.00
0.50 0.50
1
-1.00 -1.00 1.00
0.00 -1.00
0
输出样例 1

NO
YES
YES

 

小明可以上网的条件是小明的位置在WIFI的覆盖范围之内那么只要小明的位置属于任何一个以x,y为圆心,r为半径的圆域,小明就可以联网,否则不能联网。我们可以使用数组代表x,y,r;然后求出小明到圆点是否小于等于半径即可。有则YES无则NO。
 

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int main()
{
    int n;
    while(cin>>n&&n)
    {
        double x[n],y[n],r[n],a,b;
        for(int i=0;i<n;i++)
            cin>>x[i]>>y[i]>>r[i];
        cin>>a>>b;
        int i;
        for(i=0;i<n;i++)
        {
            double len1=(a-x[i])*(a-x[i]),len2=(b-y[i])*(b-y[i]);
            if(sqrt(len1+len2)<=r[i])
                break;
        }
        if(i<n)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值