枚举每条线段 这条线段上面没有与它相交的线段

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define eps 1e-8
#define INF 1e9
using namespace std;const int maxn=200000+10;
int ans[1005];
int n,cnt;typedef struct Point
{double x,y;Point() {};Point(double xx,double yy){x=xx;y=yy;}
} Vector;int sgn(double x)
{if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}Point pot[maxn];double crs_prdct(Vector a,Vector b)
{return a.x*b.y-b.x*a.y;
}Vector operator - (Point a,Point b)
{return Vector(a.x-b.x,a.y-b.y);
}int intersect(Point p1,Point p2,Point q1,Point q2)
{returnmax(p1.x,p2.x) >= min(q1.x,q2.x) &&max(q1.x,q2.x) >= min(p1.x,p2.x) &&max(p1.y,p2.y) >= min(q1.y,q2.y) &&max(q1.y,q2.y) >= min(p1.y,p2.y) &&sgn(crs_prdct(q1-p1,p2-p1))*sgn(crs_prdct(q2-p1,p2-p1)) <= 0 &&sgn(crs_prdct(p1-q1,q2-q1))*sgn(crs_prdct(p2-q1,q2-q1)) <= 0;
}int main()
{
//    freopen("in.txt","r",stdin);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);pot[2*i]=Point(x1,y1);pot[2*i+1]=Point(x2,y2);}cnt=0;for(int i=0; i<n; i++){bool flag=true;for(int j=i+1; j<n; j++){if(intersect(pot[2*i],pot[2*i+1],pot[2*j],pot[2*j+1])){flag=false;break;}}if(flag) ans[cnt++]=i+1;if(cnt>1000) break;}sort(ans,ans+cnt);printf("Top sticks:");for(int i=0; i<cnt-1; i++)printf(" %d,",ans[i]);printf(" %d.\n",ans[cnt-1]);}return 0;
}

转载于:https://www.cnblogs.com/pach/p/7212221.html

POJ 2653 Pick-up sticks 判断线段相交相关推荐

  1. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  2. 【计算几何】判断线段相交(跨立实验)

    题意:有n条线段(编号为1n),按1n的顺序放在二维坐标系上(就是先放1号,再放2号--),要求输出最上面的那些线段的编号.(就是没有其他线段压在它上面的那些线段) 注意:有交点即为被压. 1.叉积 ...

  3. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks

    题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...

  4. POJ 2653 Pick-up sticks (线段相交)

    题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...

  5. 几何基础之判断线段相交问题

    1.判断两线段相交 只要判断q1,q2在线段s1s2的两侧和s1,s2在线段q1q2的两侧. q1s1q2s1>0就是在两侧. 2.矩形里有n条直线,一条直线的终点是另一条直线的起点.问矩形被分 ...

  6. Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)

    题目: 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的好友--化学系的TT,Lele决定在田里挖出N条沟渠,每条沟渠输送 ...

  7. 几何常用算法与判断线段相交【转】

    下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心   -   代码角   找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...

  8. 德莱联盟[判断线段相交]

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  9. NYOJ1016(德莱联盟)(判断线段相交)

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

最新文章

  1. .PHONY makefile中的伪目标
  2. Science | 机器学习揭示了构建人造蛋白质的秘诀
  3. 打docker镜像_使用docker构建自己的镜像
  4. BugkuCTF-Crypto题简单加密
  5. java redis db0 db1_SpringBoot-技术专区-Redis同数据源动态切换db
  6. 我的Android进阶之旅------Android检测wifi连接状态
  7. Linux内核中流量控制(12)
  8. 服务器小白-MYSQL基础安装配置
  9. PHP-利用GD库新建图像
  10. R语言学习笔记:简单的回归分析
  11. vue中 localStorage的使用方法(详解)
  12. WebLogic安装说明
  13. python将PDF文件转化为图片
  14. 那些IT行业的经典定律
  15. Linux 下修改时间和时区
  16. php 字符串转日期格式
  17. tensorflow 如何计算向量余弦相似 cosine similarity
  18. 在word中添加公式并对齐
  19. 汇编语言中xor指令_这个汇编代码有什么作用? (TEST,XOR,JNZ)
  20. 32java访问(http):国家气象局 免费接口

热门文章

  1. python如何定义类_python类定义的讲解
  2. 【Linux】- 守护进程的启动方法
  3. Java知识系统回顾整理01基础04操作符05赋值操作符
  4. 网络流24题1 飞行员配对方案问题
  5. IIS下配置PHP遇到Service Unavailable的解决方法
  6. javascript 正则表达式-零宽断言
  7. 验证码 -图形图像识别的算法。http://blog.csdn.net/xtalk2008/archive/2007/11/01/1861310.aspx...
  8. PHP易混淆函数的区分方法及意义
  9. 红杉树信息助力XToolsCRM “SaaS”领域的巨人联盟
  10. c# 拼接Json串的几种方法