题意:
一直小A和小B是室友同住在一个公寓之中,但是小A不想要小B蹭自己的wifi。现在知道小B所在点求小A把wifi安装在哪里可以使得覆盖公寓的半径最大。
代码:
#include<bits/stdc++.h>
using namespace std;
double R;
double sqt(double a,double b,double c,double d)
{
if(sqrt(1.0*((d-b)*(d-b)+(c-a)*(c-a)))-R>1E-6)
return 1.0*R;
else
return sqrt(1.0*(d-b)*(d-b)+1.0*(c-a)*(c-a));
}
int main()
{
scanf("%lf",&R);
double x1,y1,x2,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
double x,y,r,r1;
if(x1==x2&&y1==y2){
x=(x1-R+x1)/2;
y=y1;
r=R/2.0;
printf("%.12f %.12f %.12f\n",x,y,r);
return 0;
}
r = sqt(x2,y2,x1,y1);
if(fabs(r - R) < 1E-6)
{
x = 1.0 * x1;
y = 1.0 * y1;
printf("%.12f %.12f %.12f\n",x,y,r);
}
else
{
x = (1.0*R/r*(x1-x2)+x1+x2)/2;
y = (1.0*R/r*(y1-y2)+y1+y2)/2;
printf("%.12f %.12f %.12f\n",x,y,(r+R)/2);
}
return 0;
}