昨天偷懒了,没有写总结,只好今天补上。
时间: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;
}