poj 2653 Pick-up sticks(判断线段相交)
题意:在桌上一次放n根木棒,求最上面的木棒编号;
思路:暴力枚举,看每根木棒上是否有木棒;
技巧:使用叉积,判断一个向量的两端点是否在另一向量的同侧,从而判断相交;
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const double epsi=1e-10; const int maxn=100005; inline int sign(const double &x){if(x>epsi) return 1;if(x<-epsi) return -1;return 0; } struct point{double x,y;point(){}point(double xx,double yy):x(xx),y(yy){}point operator -(const point &op2) const{return point(x-op2.x,y-op2.y);}double operator ^(const point &op2) const{return x*op2.y-y*op2.x;} }; inline double sqr(const double &x){return x*x; } inline double mul(const point &p0,const point &p1,const point &p2){return (p1-p0)^(p2-p1); } inline double dis2(const point &p1,const point &p2){return sqr(p1.x-p2.x)+sqr(p1.y-p2.y); } inline double dis(const point &p0,const point &p1){return sqrt(dis2(p0,p1)); } inline int cross(const point &p1,const point &p2,const point &p3,const point &p4) {double a1=mul(p1,p2,p3),a2=mul(p1,p2,p4);if(sign(a1)==0&&sign(a2)==0) return 2; //两向量共线if(sign(a1)==sign(a2)) return 0; //两向量不相交return 1; //两向量相交 } int n; point p1[maxn],p2[maxn]; int main() {int t,i,j,k;while(scanf("%d",&n)){if(n==0) break;int f1=0;for(i=1;i<=n;i++){scanf("%lf %lf %lf %lf",&p1[i].x,&p1[i].y,&p2[i].x,&p2[i].y);}printf("Top sticks:");for(i=1;i<=n;i++){int flag=0;for(j=i+1;j<=n;j++){if(cross(p1[i],p2[i],p1[j],p2[j])&&cross(p1[j],p2[j],p1[i],p2[i]))//因为是线段,所以要相互判断{flag=1;break;}}if(flag==0&&f1) printf(",");if(flag==0) printf(" %d",i),f1=1;}printf(".\n");}return 0; }
转载于:https://www.cnblogs.com/dashuzhilin/p/4539659.html
poj 2653 Pick-up sticks(判断线段相交)相关推荐
- POJ 2653 Pick-up sticks 判断线段相交
枚举每条线段 这条线段上面没有与它相交的线段 #include <iostream> #include <cstdio> #include <cstring> #i ...
- 判断线段相交(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 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
最新文章
- 计算机科学和Python编程导论(三) 一些简单的数值程序
- python学习手册中文版免费下载-Python学习手册 第三版
- 设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)...
- Java中Set巧用,去掉重复数据
- 在不同浏览器中,input里面的输入光标大小表现形式却大不相同
- uglifyjs压缩JS
- 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
- php7扩展sphinx,php7进行安装sphinx简单记录
- java技术架构选型方案报告.pdf,来啦,2020开源报告!
- android平板电脑浏览器,安卓平板用什么浏览器
- 练习编程思维的小游戏
- 【TL431】TL431精密电压调节器简介
- mongodb数据库扩展名_MongoDB文件型数据库
- [导读]7 Steps to Mastering Machine Learning With Python
- 海信E8K和E8H区别对比哪个好
- docker add new port
- 获取 JSON 数据得个数 length
- 报错AttributeError: ‘NoneType‘ object has no attribute ‘shape‘
- 双音多频 DTMF原理
- AOSP 8.0 系统启动之四ART虚拟机启动(一)
热门文章
- CSS 全解析实战(一)-导读
- Oracle - 安装 Oracle Database 11g Release 2
- SharePoint中CAML使用的一些总结
- 第十八章 lamp架构
- 德国软件巨头SAP旗下风投基金募集10亿美元 专门投资科技初创公司
- 从 ReactiveCocoa 中能学到什么?不用此库也能学以致用
- java生成实体类的工具内部是如何实现的(mysql)
- linux下修改当前目录下图像文件并删除
- printf 规定数据输出方式
- java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...