题目描述
平面上有n个没有公共点的圆。你要从点(X1,Y1)走到(X2,Y2)。问你最少要经过多少圆的边界。保证这两个点都不在圆的边界上。
输入
第一行一个整数n。
接下来三行,每行n个整数,之间有1个空格分开,分别表示n个圆的圆心坐标xi、yi和半径r,格式如下:
x1,x2,„,xi,„,xn
y1,y2,„,yi,„,yn
r1,r2,„,ri,„,rn
最后一行四个整数X1,Y1,X2,Y2,之间有1个空格分开,表示起点(X1,Y1)和终点(X2,Y2)。
输出
输出一行一个整数,意义如上。
#include <stdio.h>
#include <string>
#include <cmath>
using namespace std;
int a[100],b[100],c[100];
int xx1,xx2,yy1,yy2,n,i,ans;
bool x,y;
int main()
{
freopen("circle.in", "r", stdin);
freopen("circle.out", "w", stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
for (int i=1;i<=n;i++)
scanf("%d",&b[i]);
for (int i=1;i<=n;i++)
scanf("%d",&c[i]);
scanf("%d%d%d%d",&xx1,&yy1,&xx2,&yy2);
for (int i=1;i<=n;i++)
{
x=0; y=0;
if (sqrt((xx1-a[i])*(xx1-a[i])+(yy1-b[i])*(yy1-b[i]))<c[i]) x=1;
if (sqrt((xx2-a[i])*(xx2-a[i])+(yy2-b[i])*(yy2-b[i]))<c[i]) y=1;
if (!x&&y||!y&&x) ans++;
}
printf("%d\n",ans);
}
Comments NOTHING