POJ 2653 Pick-up sticks 判断线段相交
枚举每条线段 这条线段上面没有与它相交的线段
#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 判断线段相交相关推荐
- 判断线段相交(hdu1558 Segment set 线段相交+并查集)
先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...
- 【计算几何】判断线段相交(跨立实验)
题意:有n条线段(编号为1n),按1n的顺序放在二维坐标系上(就是先放1号,再放2号--),要求输出最上面的那些线段的编号.(就是没有其他线段压在它上面的那些线段) 注意:有交点即为被压. 1.叉积 ...
- 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...
- POJ 2653 Pick-up sticks (线段相交)
题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...
- 几何基础之判断线段相交问题
1.判断两线段相交 只要判断q1,q2在线段s1s2的两侧和s1,s2在线段q1q2的两侧. q1s1q2s1>0就是在两侧. 2.矩形里有n条直线,一条直线的终点是另一条直线的起点.问矩形被分 ...
- Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)
题目: 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的好友--化学系的TT,Lele决定在田里挖出N条沟渠,每条沟渠输送 ...
- 几何常用算法与判断线段相交【转】
下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心 - 代码角 找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...
- 德莱联盟[判断线段相交]
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- NYOJ1016(德莱联盟)(判断线段相交)
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
最新文章
- .PHONY makefile中的伪目标
- Science | 机器学习揭示了构建人造蛋白质的秘诀
- 打docker镜像_使用docker构建自己的镜像
- BugkuCTF-Crypto题简单加密
- java redis db0 db1_SpringBoot-技术专区-Redis同数据源动态切换db
- 我的Android进阶之旅------Android检测wifi连接状态
- Linux内核中流量控制(12)
- 服务器小白-MYSQL基础安装配置
- PHP-利用GD库新建图像
- R语言学习笔记:简单的回归分析
- vue中 localStorage的使用方法(详解)
- WebLogic安装说明
- python将PDF文件转化为图片
- 那些IT行业的经典定律
- Linux 下修改时间和时区
- php 字符串转日期格式
- tensorflow 如何计算向量余弦相似 cosine similarity
- 在word中添加公式并对齐
- 汇编语言中xor指令_这个汇编代码有什么作用? (TEST,XOR,JNZ)
- 32java访问(http):国家气象局 免费接口
热门文章
- python如何定义类_python类定义的讲解
- 【Linux】- 守护进程的启动方法
- Java知识系统回顾整理01基础04操作符05赋值操作符
- 网络流24题1 飞行员配对方案问题
- IIS下配置PHP遇到Service Unavailable的解决方法
- javascript 正则表达式-零宽断言
- 验证码 -图形图像识别的算法。http://blog.csdn.net/xtalk2008/archive/2007/11/01/1861310.aspx...
- PHP易混淆函数的区分方法及意义
- 红杉树信息助力XToolsCRM “SaaS”领域的巨人联盟
- c# 拼接Json串的几种方法