hdu1140(水)

这道题我卡了很久是因为没有看清题目

距离地球很远的卫星打地球表面的目标,在卫星能检测到的距离范围内攻打,那就是离目标距离不能超过切线了


有的目标点在地球内部,卫星攻打的时候给地球一个大洞就是题目的事了

//

//  main.cpp

//  1.1

//

//  Created by Mr.Xue on 17/7/11.

//  Copyright © 2017 Mr.Xue. All rights reserved.

//


#include <iostream>

#include <stdio.h>

#include <string.h>

#include <math.h>

using namespace std;

double sa[10000][4],to[10000][4];

int flag[1000];

int main()

{

    int n,m,sum;

    double r=20000/3.1415926;

    while(1)

    {

        scanf("%d %d",&n,&m);

        if(n==0&&m==0)

            break;

        sum=0;

        memset(flag,0,sizeof(flag));

        for(int i=0;i<n;i++)

        {

            scanf("%lf %lf %lf",&sa[i][0],&sa[i][1],&sa[i][2]);

        }

        for(int i=0;i<m;i++)

        {

            //printf("i=%d\n",i);

            scanf("%lf %lf %lf",&to[i][0],&to[i][1],&to[i][2]);

        }

        for(int i=0;i<n;i++)

        {

            double a1,a2,dis;

            a1=sqrt(sa[i][0]*sa[i][0]+sa[i][1]*sa[i][1]+sa[i][2]*sa[i][2]);

            a2=sqrt(a1*a1-r*r);

            for(int j=0;j<n;j++)

            {

                if(flag[j]==1)

                    continue;

                dis=sqrt((sa[i][0]-to[j][0])*(sa[i][0]-to[j][0])

                         +(sa[i][1]-to[j][1])*(sa[i][1]-to[j][1])

                         +(sa[i][2]-to[j][2])*(sa[i][2]-to[j][2]));

                if(dis<=a2)

                {

                    sum++;

                    flag[j]=1;

                }

            }

            

        }

        printf("%d\n",sum);

    }

    

    //cout << "Hello, World!\n";

    return 0;

}

/*

3 2

-10.82404031 -1594.10929753 -6239.77925152

692.58497298 -5291.64700245 4116.92402298

3006.49210582 2844.61925179 5274.03201053

2151.03635167 2255.29684503 5551.13972186

-1000.08700886 -4770.25497971 4095.48127333


 3 4

 0 0 6466.197723676

 0 6466.197723676 0

 6466.197723676 0 0

 6365.197723676 112.833485488 0

 0 0 6366.197723676

 0 -6366.197723676 0

 6366.197723676 0 0

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值