题目位置:
链接: Codeforces Round 156 (Rated for Div. 2)—B. Fear of the Dark
问大致题描述:
现在有A(ax,ay),B(bx,by)两处灯,问选择最小的光照范围r使,能照射到P(px,py),O两点。
输入:
2
3 3
1 0
-1 6
3 3
-1 -1
4 3
输出:
3.6055512755
3.2015621187
原因分析与代码:
本题是一道数学几何题,遇到这种提我们常规的想法是要利用点的坐标去计算点之间的距离然后去找关系,本题可分为是两种情况,一种是在一个圆内,一种是在两个圆内且两个圆存在相交(这里的最小情况为两圆相切)。
#include<bits/stdc++.h>
using namespace std;
int t,px,py,ax,ay,bx,by;
void solve()
{
cin>>px>>py>>ax>>ay>>bx>>by;
double pa=pow(px-ax,2)+pow(py-ay,2),pb=pow(px-bx,2)+pow(py-by,2);
double oa=pow(ax,2)+pow(ay,2),ob=pow(bx,2)+pow(by,2);
double ab=pow(ax-bx,2)+pow(ay-by,2);
double ans=max(min(pa,pb),min(oa,ob));
ans=max(ans,ab/4);
ans=min(ans,max(pa,oa)); ans=min(ans,max(pb,ob));
printf("%.10lf\n",sqrt(ans));
}
int main()
{
cin>>t;
while(t--) solve();
return 0;
}
总结
通过本题可知分类讨论的重要性,还有就是对于数学几何题,坐标和方向不是核心关系,距离才是核心关系,距离是决定答案的基本性质,图形可以在平面上任意平移,不需要定位。