POJ 2653 Pick-up sticks <计算几何>
2017-11-09 09:16
519 查看
题目
水题。。但是不知道为什么从后往前扫会超时。。
代码:
水题。。但是不知道为什么从后往前扫会超时。。
代码:
#include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const double EPS=1e-8; const int MAXN=1e5+5; struct Point; typedef Point Vec; int dblcmp(double x){ return fabs(x)<EPS?0:(x>0?1:-1); } struct Point{ double x,y; Point(){} Point(double xx,double yy):x(xx),y(yy){} Vec operator -(Point p){ return Point(x-p.x,y-p.y); } double operator ^(Vec v){ return x*v.y-y*v.x; } }; struct Stick{ Point p1,p2; Stick(){} Stick(Point pp1,Point pp2):p1(pp1),p2(pp2){} bool isCross(Stick& s){ return (dblcmp((p2-p1)^(s.p1-p1))^dblcmp((p2-p1)^(s.p2-p1)))==-2&& (dblcmp((s.p2-s.p1)^(p1-s.p1))^dblcmp((s.p2-s.p1)^(p2-s.p1)))==-2; } }; Stick stick[MAXN]; int main(){ //ios::sync_with_stdio(false); int n; while(scanf("%d",&n),n){ double x1,y1,x2,y2; for(int i=0;i<n;++i){ scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2); stick[i]=Stick(Point(x1,y1),Point(x2,y2)); } printf("Top sticks: "); for(int i=0;i<n;++i){ int j; for(j=i+1;j<n;++j){ if(stick[i].isCross(stick[j])) break; } if(j==n){ if(i==n-1) printf("%d.\n",i+1); else printf("%d, ",i+1); } } } return 0; }
相关文章推荐
- POJ 2653 Pick_up_stick(计算几何)
- POJ 2653 Pick-up sticks(计算几何 求线段交点)
- POJ 1269 Intersecing Lines <计算几何>
- POJ 1410 Intersection <计算几何(线段相交判断)>
- POJ 2653 Pick-up sticks [线段相交]【计算几何】
- POJ 2653 && HDU 1147 Pick-up sticks(计算几何)
- (计算几何step8.1.2.1)POJ 2653 Pick-up sticks(判断一根木棒的上面时候还有其他木棒——判断两条直线是否相交)
- POJ 2653 Pick-up sticks(计算几何,判断线段相交)
- POJ Ty Storage <计算几何>
- POJ2653——Pick-up sticks
- POJ 1039 Pipe <计算几何>
- 简单几何(线段相交) POJ 2653 Pick-up sticks
- POJ 2653 Pick-up sticks
- POJ 3304 Segments <计算几何(直线与线段相交判断)>
- poj 2653 Pick-up sticks 计算几何
- HDU 1147 poj 2653 Pick-up sticks
- POJ 1696 Space Ant <计算几何>
- poj 2653 Pick-up sticks 计算几何
- Pick-up sticks POJ - 2653
- 【POJ】2653 Pick-up sticks(计算几何基础+暴力)