HDU 4720Naive and Silly Muggles热身赛2 1005题(分锐角钝角三角形讨论)
30 02 01 21 -0.50 02 01 21 -0.60 03 01 11 -1.5
Case #1: DangerCase #2: SafeCase #3: Safe

#include<iostream>#include<cstring>#include<cmath>#include<string>#include<cstdio>using namespace std;int main(){ int tes; int cas=0; double x1,y1,x2,y2,x3,y3,a,b,r2,x,y; scanf("%d",&tes); while(tes--) { scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x,&y); //先求出这三个点的外接圆(x-a)^2+(y-b)^2=r^2; //r2代表r的平方 //先判断锐角钝角三角形 if((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)<0) //(x1,y1)为钝角 { a=(x3+x2)/2.0,b=(y3+y2)/2.0; r2=(a-x2)*(a-x2)+(b-y2)*(b-y2); } else if((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2)<0) //(x2,y2)为钝角 { a=(x3+x1)/2.0,b=(y3+y1)/2.0; r2=(a-x1)*(a-x1)+(b-y1)*(b-y1); } else if((x1-x3)*(x2-x3)+(y1-y3)*(y2-y3)<0) //(x3,y3)为钝角 { a=(x2+x1)/2.0,b=(y2+y1)/2.0; r2=(a-x1)*(a-x1)+(b-y1)*(b-y1); } else { a=((x1*x1+y1*y1-x2*x2-y2*y2)*(y1-y3)-(x1*x1+y1*y1-x3*x3-y3*y3)*(y1-y2))/(2.0*((y1-y3)*(x1-x2)-(y1-y2)*(x1-x3))); b=((x1*x1+y1*y1-x2*x2-y2*y2)*(x1-x3)-(x1*x1+y1*y1-x3*x3-y3*y3)*(x1-x2))/(2.0*((x1-x3)*(y1-y2)-(x1-x2)*(y1-y3))); r2=(x1-a)*(x1-a)+(y1-b)*(y1-b); } if((x-a)*(x-a)+(y-b)*(y-b)<=r2) printf("Case #%d: Danger\n",++cas); else printf("Case #%d: Safe\n",++cas); } return 0;}