题意:Fifa想用wifi下载足球游戏, 但是Fafa是个流浪狂魔, 所以Fifa想让他的wifi在公寓里尽量覆盖最大的面积,并且不覆盖到Fafa和公寓外的人,fafa的坐标可以在公寓外。
题解:求半径最大的地方就好了, 这个半径最大的位置一定在Fafa和公寓中心的连线上(前提是Fafa不和公寓中心重合且fafa在公寓范围内)。
代码:
1 #include2 using namespace std; 3 #define LL long long 4 #define fi first 5 #define se second 6 #define lson l,m,rt<<1 7 #define rson m+1,r,rt<<1|1 8 #define max3(a,b,c) max(a,max(b,c)) 9 const int INF = 0x3f3f3f3f;10 typedef pair pll;11 int main()12 {13 double r, x1, y1, x2, y2;14 cin >> r >> x1 >> y1 >> x2 >> y2;15 double l = sqrt(pow(x1-x2,2)+ pow(y1-y2,2));16 if(l == 0)//重合17 {18 printf("%.7f %.7f %.7f", x1+r/2, y1, r/2);19 return 0;20 }21 if(l > r)//在公寓外22 {23 printf("%.7f %.7f %.7f", x1, y1, r);24 return 0;25 }26 double Sin = (y1-y2) / l;27 double Cos = (x1-x2) / l;28 double ll = (l+r)/2;29 double ansy = y2 + Sin * ll;30 double ansx = x2 + Cos * ll;31 printf("%.7f %.7f %.7f\n",ansx, ansy, ll);32 return 0;33 }