这道题我卡了很久是因为没有看清题目
距离地球很远的卫星打地球表面的目标,在卫星能检测到的距离范围内攻打,那就是离目标距离不能超过切线了
有的目标点在地球内部,卫星攻打的时候给地球一个大洞就是题目的事了
//
// 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
*/