Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
注意..对弧度求gcd的时候..要和pi求一次测试一晚上找到的原因。。。 ag=fgcd(a[1],fgcd(a[2],fgcd(pi,a[3]))); 就是这个意思 http://plg1.cs.uwaterloo.ca/~acm00/030125/data/ 这里有测试数据 此题为A题 附上代码: #include"iostream" #include"cmath" using namespace std; const double eps=6e-3; const double eps2=1e-6; const double pi=acos(-1.0); double fgcd(double a,double b){ if(b<eps)return a; else return fgcd(b,fmod(a,b)); } /*double fmod(double x, double y) { return x-floor(x/y)*y; } double fgcd(double a, double b) { double t; if(a>b) //a>b { t=a; a=b; b=t; } if(fabs(a)<1e-6) return b; return fgcd(fmod(b,a),a); }*/ double cal_center_x(double x1,double y1,double x2,double y2,double x3,double y3){ return((y1*(y2*y2+x2*x2-y3*y3-x3*x3) - y2*(y1*y1 - y3*y3 + x1*x1 - x3*x3) + y3*(y1*y1-y2*y2+x1*x1-x2*x2))/(2*(-x1*y2 + x1*y3 + x2*y1 - x2*y3 - x3*y1 + x3*y2))); } double cal_center_y(double x_out,double x1,double y1,double x2,double y2,double x3,double y3){ if(y1||y2)return ((x2-x1)/(y1-y2)*x_out + (y1*y1-y2*y2+x1*x1-x2*x2)/2/(y1-y2)); else return ((x3-x1)/(y1-y3)*x_out + (y1*y1-y3*y3+x1*x1-x3*x3)/2/(y1-y3)); } double dist(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double arcline(double x,double y,double x1,double y1,double x2,double y2){ double d1=dist(x,y,x1,y1); double d2=dist(x,y,(x1+x2)/2.0,(y1+y2)/2.0); return acos(d2/d1); } double a[4]; /*bool check(int i) { int k; double deg=2*pi/i; double t,p1,p2; for(k=1;k<4;++k) { t=a[k]/deg; p1=t-floor(t); p2=ceil(t)-t; if(p1>1e-5&&p2>1e-5) return false; } return true; }*/ int main(){ // freopen("1018in.txt","r",stdin); // freopen("1018out.txt","w",stdout); int T; double x,y,x1,y1,x2,y2,x3,y3,a1,a2,a3,ag,l1,l2,l3; scanf("%d",&T); while(T--){ scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3); x=cal_center_x(x1,y1,x2,y2,x3,y3); y=cal_center_y(x,x1,y1,x2,y2,x3,y3); a[1]=arcline(x,y,x1,y1,x2,y2); a[2]=arcline(x,y,x1,y1,x3,y3); a[3]=arcline(x,y,x2,y2,x3,y3); // printf("%.16lf\n",a[1]); ag=fgcd(a[1],fgcd(a[2],fgcd(pi,a[3]))); // ag=fgcd(a1,a3); // cout<<x<<","<<y<<endl; //cout<<a[1]<<","<<a[2]<<","<<a[3]<<endl; //cout<<ag<<endl; //printf("%.16lf\n",ag); printf("%d\n",(int)(pi/ag+eps2)); // int x; // for(x=3;x<=200;++x) // if(check(x)) // break; // printf("%.16lf\n",2*pi/(double)x); // cout<<x<<endl; } // system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator