两个几何水题ZOJ 1090 2540

昨天偷懒了,没有写总结,只好今天补上。

时间:2011-7-6

事件:ZOJ 10902540.

真的是很不好意思写出两个这么水的题,但应为之前没碰过类似的几何题,做起来还是吃力。

对于2540,那绝对是算法的问题,我花了很长时间在在考虑三个顶点上,我想几乎每种情况我都考虑到了,奈何还是WA。无奈加无奈,看看老师的方法,他是用4个顶点3条边加个初中学的勾股定理。OK。

对于1090 精度问题,这是几何问题老生长谈的,用float  WA。

还有一个OJ提交问题while()当时里面的scanf()后面没加!=EOF 提交上去就TLE。

所以,几何问题就两点:算法和精度。    


1090就一个公会、公式给出就OK了,cosA,sinA

海伦公式也可以

include<stdio.h> 
#include<math.h> 
double qiuedge( double x1, double y1, double x2, double y2) 

     double E; 
    E=( double)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 
     return E; 

int  main()  

     struct vetex{ 
         double x; 
         double y; 
    }vetex; 
     struct vetex V1,V2,V3;
     double a,b,c,r; 
     double A; 
     while(scanf( "%lf%lf%lf%lf%lf%lf",&V1.x,&V1.y,&V2.x,&V2.y,&V3.x,&V3.y)!=EOF) 
    { 
        a=qiuedge(V1.x,V1.y,V2.x,V2.y); 
        b=qiuedge(V1.x,V1.y,V3.x,V3.y); 
        c=qiuedge(V2.x,V2.y,V3.x,V3.y); 
        A=acos((b*b+c*c-a*a)/( 2*b*c));  
        r=a/( 2*sin(A)); 
         //printf("%f\n",r); 
        printf( "%.2lf\n", 3. 141592653589793* 2*r); 
    } 
     return  0

zoj  2540
#include<stdio.h> 
int  main() //使用了4个顶点,3条边,结合勾股定理 

     struct vetex{ 
         int x; 
         int y;  
    }vetex; 
     struct vetex p1,p2,p3,p4; 
     int a1,a2,a3,T,k= 1
    scanf( "%d",&T); 
     while(T--) 
    { 
        scanf( "%d%d%d%d%d%d%d%d",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y); 
        a1=(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y); 
        a2=(p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y); 
        a3=(p4.x-p1.x)*(p4.x-p1.x)+(p4.y-p1.y)*(p4.y-p1.y); 
         if(a1==a2&&a1+a2==a3||a1==a3&&a1+a3==a2||a2==a3&&a2+a3==a1) printf( "Case %d:\nYes\n",k++); 
             else printf( "Case %d:\nNo\n",k++); 
             if(T) printf( "\n"); 
    } 
     return  0

 

你可能感兴趣的:(c,算法,float)