题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5476
题目大意:一个等腰三角形ABC,AB=AC,M是BC的中点,让在三角形中找出一点P,使得∠MPB+∠APC=∠MPC+∠APB,找出P的轨迹的长度。
分析:P的轨迹如下图:
接下来直接计算就行了。
实现代码如下:
#include <cstdio> #include <cmath> using namespace std; const int PI=acos(-1.0); struct POINT { double x,y; }a,b,c,m; double dist(POINT m,POINT n) { return sqrt( (m.x-n.x)*(m.x-n.x)+(m.y-n.y)*(m.y-n.y) ); } int main() { int t,T=1; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y); m.x=(b.x+c.x)/2,m.y=(b.y+c.y)/2; double am=dist(a,m); double r=dist(b,m)/dist(a,m)*dist(a,b); double tmp=atan(dist(a,b)/r); printf("Case #%d: %.4f\n",T++,am+2*tmp*r); } return 0; }