HDOJ HDU 1140 War on Weather

HDOJ 1140 War on Weather

题目

点此查看 HDOJ HDU 1140 War on Weather

分类

几何

题意

卫星要 改变 地球上的气压 影响天气
卫星 在地球上至少 50 km
气压不稳定点在地球表面
求 在卫星范围内的气压点 数量

题解

先看这个图
HDOJ 1140 图示
我们只要计算出 dt 绿色地带为范围内 此区域的点距离都小于 dt
那么看 dt 如何求
由于 视线与地球相切 所以 dt = 卫星到球心的距离 - R(地球半径)
逐个求出 dt
遍历每个气压点即可

代码

#include <iostream>
#include <cmath>
#define maxn 100

const double PI = 3.14159265358979323846;
const double ER = 20000.0 / PI;

using namespace std;

double stlt[maxn][3];
double slr[maxn];

double dist(double x,double y,double z,double r);
double dist(double x,double y,double z); 

int main()
{
    int k,m,res;
    double dt,x,y,z;
    while(cin >> k >> m && k && m)
    {
        res = 0;
        for(int i = 0;i < k;i++)
        {
            cin >> stlt[i][0] >> stlt[i][1] >> stlt[i][2];
            slr[i] = dist(stlt[i][0],stlt[i][1],stlt[i][2],ER); 
        }
        for(int i = 0;i < m;i++)
        {
            cin >> x >> y >> z;
            for(int j = 0;j < k;j++)
            {
                dt = dist(stlt[j][0] - x,stlt[j][1] - y,stlt[j][2] - z);
                if(slr[j] >= dt)
                {
                    res++;
                    break;
                }
            } 
        }
        cout << res << endl;
    }
    return 0;
}

double dist(double x,double y,double z,double r)
{
    return sqrt(x*x + y*y + z*z - r*r);
}

double dist(double x,double y,double z)
{
    return sqrt(x*x + y*y + z*z);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值