您的位置:首页 > 其它

两个几何水题ZOJ 1090 2540

2011-07-08 23:52 309 查看
昨天偷懒了,没有写总结,只好今天补上。
时间: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: