Luogu P1652 圆


Luogu P1652 圆

解析

  • 认真读题,注意任意两个圆都相离,而且是画曲线,也就是说只有点在圆内才会需要穿过圆的边界,否则绕过去就可以了
  • 注意一种情况,起点和终点都在同一个圆内,那么这个圆可以不需穿过边界
  • 判断一个点是否在圆内看它到圆心的距离是否小于半径

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;
}
原文地址:https://www.cnblogs.com/Hawking-llfz/p/11550649.html