hdu 1086 You can Solve a Geometry Problem too(计算几何水题)
2014-03-05 12:35
435 查看
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<vector> using namespace std; double EPS = 1e-10; double add(double a,double b){ if(abs(a+b)<EPS*(abs(a)+abs(b))) return 0; return a+b; } struct P{ double x,y; P() {} P(double x,double y) : x(x),y(y){ } P operator +(P p){ return P(add(x,p.x),add(y,p.y)); } P operator -(P p){ return P(add(x,-p.x),add(y,-p.y)); } P operator *(double d){ return P(x*d,y*d); } double dot(P p){ return add(x*p.x,y*p.y); } double det(P p){ return add(x*p.y,-y*p.x); } }; bool on_seg(P p1,P p2,P p){ return (p1-p).det(p2-p)==0 && (p1-p).dot(p2-p)<=0; } P in(P p1,P p2,P q1,P q2){ return p1+(p2-p1)*( (q2-q1).det(q1-p1)/(q2-q1).det(p2-p1) ); } P p[105],q[105]; int n; int main() { while(~scanf("%d",&n) && n){ for(int i=0;i<n;i++){ scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&q[i].x,&q[i].y); } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ if((p[i]-q[i]).det(p[j]-q[j])==0){ if(on_seg(p[i],q[i],p[j])+on_seg(p[i],q[i],q[j])+on_seg(p[j],q[j],p[i])+on_seg(p[j],q[j],q[i])) ans++; } else{ P r=in(p[i],q[i],p[j],q[j]); if(on_seg(p[i],q[i],r) && on_seg(p[j],q[j],r)) ans++; } } } printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)
- HDU 1086 You can Solve a Geometry Problem too(计算几何)
- hdu_1086 You can Solve a Geometry Problem too(计算几何)
- HDU_1086 You can solve a geometry problem too(计算几何)
- hdu_1086 You can Solve a Geometry Problem too(计算几何)
- 计算几何——HDUOJ 1086 - YouCanSolveAGeometryProblemToo(线段交点)
- HDU 1086 You can Solve a Geometry Problem too(水题)
- HDU_1086 You can Solve a Geometry Problem too(几何题)
- hdu 1086 You can Solve a Geometry Problem too (几何)
- HDU 1086 You can Solve a Geometry Problem too && 简单几何
- hdoj 1086 You can Solve a Geometry Problem too 【计算几何】
- HDU 1086 You can Solve a Geometry Problem too(水题,判断线段相交)
- HDU 1086 You can Solve a Geometry Problem too
- hdu 1086 You can Solve a Geometry Problem too
- You can Solve a Geometry Problem too(计算几何_求线段相交)
- HDU 1086 You can Solve a Geometry Problem too(判定线段相交 规范相交和非规范相交)
- HDU-#1086 You can Solve a Geometry Problem too(线段相交判定)
- HDU 1086 You can Solve a Geometry Problem too
- hdu 1086 You can Solve a Geometry Problem too
- HDU - 1086.You can Solve a Geometry Problem too