题意:Fifa想用wifi下载足球游戏, 但是Fafa是个流浪狂魔, 所以Fifa想让他的wifi在公寓里尽量覆盖最大的面积,并且不覆盖到Fafa和公寓外的人,fafa的坐标可以在公寓外。
题解:求半径最大的地方就好了, 这个半径最大的位置一定在Fafa和公寓中心的连线上(前提是Fafa不和公寓中心重合且fafa在公寓范围内)。
代码:
1 #include<bits/stdc++.h> 2 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<int,int> 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 }