njust 1734 南京邀请赛热身赛 A题 Dinner
来源:互联网 发布:123网络测速 编辑:程序博客网 时间:2024/06/06 09:47
/*历时四个小时感动*/#include<cstdio>#include<cmath>#define eps 10e-4#define max(a,b) (a)>(b)?(a):(b)#define min(a,b) (a)>(b)?(b):(a)#define PI acos(-1)using namespace std;double x1,x2,x3,y2,y3,a,b,c,d,e,f,x,y,r,yy;double d12,d13,d23,t12,t13,t23;void getR()//算出半径 圆心{ a=2*(x2-x1); b=2*(y2-yy); c=x2*x2+y2*y2-x1*x1-yy*yy; d=2*(x3-x2); e=2*(y3-y2); f=x3*x3+y3*y3-x2*x2-y2*y2; x=(b*f-e*c)/(b*d-e*a); y=(d*c-a*f)/(b*d-e*a); r=sqrt((x-x1)*(x-x1)+(y-yy)*(y-yy));}void getD()//算出三个点之间的距离{ d12=sqrt((x1-x2)*(x1-x2)+(yy-y2)*(yy-y2)); d13=sqrt((x1-x3)*(x1-x3)+(yy-y3)*(yy-y3)); d23=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));}void getT()//算出三个角度{ t12=acos(1-d12*d12/(2*r*r)); t23=acos(1-d23*d23/(2*r*r)); t13=acos(1-d13*d13/(2*r*r));}int main(){ int i,k1,k2; bool flag; double top,mid,down; while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&yy,&x2,&y2,&x3,&y3)!=EOF) { flag=false; getR(); getD(); getT();top=max(t12,t13); top=max(top,t23); down=min(t12,t13); down=min(down,t23); mid=t12+t13+t23-top-down; for(i=3;i<=100;i++) { for(k1=1;k1<=i;k1++) if(fabs(k1*(2*PI/i)-down)<eps) { flag=true; break; } if(flag) { for(k2=1;k2<=i;k2++) if(fabs(k2*(2*PI/i)-mid)<eps) //{ // if(fabs((i-k1-k2)*(2*PI/i)-2*PI-top)<eps) goto A; //} } flag = false; } A:; if(flag) printf("%d\n",i); else printf("NO\n"); } return 0;}