zoj 1010
2011-08-12 17:31
204 查看
自己敲代码的能力太烂了啊,还有待提高啊!怎么老是犯低级的错误呢!首先,敲代码时敲错变量,第二调试时候的检测语句老是不知道删除,导致程序多贡献wa。谨记!!!
这个题目,判断是否是多边形的时候,直接用黑书的模版就过了,但是我敲错一个变量老是没找出来,调试的很久很久。判断给定的点能否构成多边形也就是判断线段是否相交!
不过,总算还是过了。
这个题目,判断是否是多边形的时候,直接用黑书的模版就过了,但是我敲错一个变量老是没找出来,调试的很久很久。判断给定的点能否构成多边形也就是判断线段是否相交!
不过,总算还是过了。
#include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; #define N 1002 #define EPS 1e-8 struct point { double x; double y; }p ; struct Line { point a; point b; }line ; int dblcmp(double d) { if(fabs(d)<EPS)return 0; return d>0?1:-1; } double det(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } double cross(point a,point b,point c) { return det(b.x-a.x,b.y-a.y,c.x-a.x,c.y-a.y); } double dotdet(double x1,double y1,double x2,double y2) { return x1*x2+y1*y2; } double dot(point a,point b,point c) { return dotdet(b.x-a.x,b.y-a.y,c.x-a.x,c.y-a.y); } int betweenCmp(point a,point b,point c) { return dblcmp(dot(a,b,c)); } bool interecter(Line a,Line b) { double s1,s2,s3,s4; int d1,d2,d3,d4; d1=dblcmp(s1=cross(a.a,a.b,b.a)); d2=dblcmp(s2=cross(a.a,a.b,b.b)); d3=dblcmp(s3=cross(b.a,b.b,a.a)); d4=dblcmp(s4=cross(b.a,b.b,a.b)); if(((d1^d2)==-2)&&((d3^d4)==-2))return true; else if(d1==0&&betweenCmp(b.a,a.a,a.b)<=0|| d2==0&&betweenCmp(b.b,a.a,a.b)<=0|| d3==0&&betweenCmp(a.a,b.a,b.b)<=0|| d4==0&&betweenCmp(a.b,b.a,b.b)<=0)return true; return false; } int main() { int n; int cn=0; while(scanf("%d",&n)&&n) { for(int i=0;i<n;i++) { scanf("%lf%lf",&p[i].x,&p[i].y); line[i].a=p[i]; } for(int i=1;i<=n;i++) { line[i-1].b=line[i%n].a; } if(n<=2) { printf("Figure %d: Impossible\n\n",++cn); continue; } bool flag=false; for(int i=0;i<n;i++) { for(int j=i+2,k=0;k<n-3;j++,k++) { if(interecter(line[i],line[j%n])) { flag=true; break; } } if(flag)break; } if(flag) { printf("Figure %d: Impossible\n",++cn); } else { double area=0; point c; c.x=0;c.y=0; for(int i=0;i<n;i++) { area+=cross(c,p[(i+1)%n],p[i]); } area/=2; printf("Figure %d: %.2lf\n",++cn,fabs(area)); } printf("\n"); } return 0; }
相关文章推荐
- ZOJ 1010 Area (判线段相交,简单多边形的面积)
- 【计算n边形面积】zoj 1010 Area
- ZOJ1010 Area
- HDU 1010 Tempter of the Bone &&ZOJ 2110【DFS】
- ZOJ 1010 Area(判定线段是否构成多边形)
- zoj 2110 || hdoj 1010 Tempter of the Bone(DFS)
- ZOJ 1010:WA
- ZOJ 1010
- zoj 2110(hdu 1010)Tempter of the Bone(深搜)
- zoj 1010 Area
- zoj 1010 Area【线段相交问题】
- 奇偶剪枝-优化(ZOJ 2110 , HDU 1010)
- zoj 1010 Area 判断线段是否相交(把线段扩充一倍后 好处理) + 多边形求面积
- 计算几何基础与应用:HDU 1348&&ZOJ 1648&&POJ 2398&&ZOJ 1010
- ZOJ 1010 Area 求任意多边形面积
- 浙大ZOJ 1010 Area问题解决
- ZOJ 1010 判断简单多边形+求面积
- ZOJ--1010:Area(线段判交问题)
- zoj 1010
- zoj-1010 Area 多边形判别与面积