解析
- 认真读题,注意任意两个圆都相离,而且是画曲线,也就是说只有点在圆内才会需要穿过圆的边界,否则绕过去就可以了
- 注意一种情况,起点和终点都在同一个圆内,那么这个圆可以不需穿过边界
- 判断一个点是否在圆内看它到圆心的距离是否小于半径
Code
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
struct circle
{
int x,y,r;
}c[55];
int n,ax,ay,bx,by,num;
bool book[55];
double cal(int v,int xx,int yy)
{
return (double)sqrt((c[v].x-xx)*(c[v].x-xx)+(c[v].y-yy)*(c[v].y-yy));
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&c[i].x);
for(int i=1;i<=n;i++) scanf("%d",&c[i].y);
for(int i=1;i<=n;i++) scanf("%d",&c[i].r);
scanf("%d%d%d%d",&ax,&ay,&bx,&by);
for(int i=1;i<=n;i++)
{
double da=cal(i,ax,ay),db=cal(i,bx,by);
if(da<c[i].r&&db<c[i].r) continue;
if(da<c[i].r||db<c[i].r) num++;
}
printf("%d
",num);
return 0;
}