【poj-1066】判断线段相交
题目链接:https://vjudge.net/problem/POJ-1066
题意:给出一些直线,直线与直线切割的线段是围墙,只能从围墙中间穿过,问最少穿过几层墙才能到达终点
看了hzwer的,觉得好有道理,虽然说是中点,但其实直接求每个端点就ok了
1 /************************************************************************* 2 > File Name: poj1066.cpp 3 # File Name: poj1066.cpp 4 # Author : xiaobuxie 5 # QQ : 760427180 6 # Email:760427180@qq.com 7 # Created Time: 2019年09月21日 星期六 15时11分27秒 8 ************************************************************************/ 9 10 #include<iostream> 11 #include<cstdio> 12 #include<map> 13 #include<cmath> 14 #include<cstring> 15 #include<set> 16 #include<queue> 17 #include<vector> 18 #include<algorithm> 19 using namespace std; 20 typedef long long ll; 21 #define inf 0x3f3f3f3f 22 #define pq priority_queue<int,vector<int>,greater<int> > 23 const double eps = 1e-8; 24 const int N=50; 25 int sgn(double x){ 26 if(fabs(x)<eps) return 0; 27 if(x<0) return -1; 28 return 1; 29 } 30 struct Point{ 31 double x,y; 32 Point operator - (const Point& b)const{ 33 return (Point){x-b.x,y-b.y}; 34 } 35 double operator ^ (const Point& b)const{ 36 return x*b.y-b.x*y; 37 } 38 }P[N<<2]; 39 struct Line{ 40 Point s,e; 41 }L[N]; 42 bool inter(Line l1,Line l2){ 43 return 44 max(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) && 45 max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) && 46 max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) && 47 max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) && 48 sgn((l2.s-l1.s)^(l1.e-l1.s))*sgn((l2.e-l1.s)^(l1.e-l1.s)) <= 0 && 49 sgn((l1.s-l2.s)^(l2.e-l1.s))*sgn((l1.e-l2.s)^(l2.e-l2.s)) <= 0; 50 } 51 int main(){ 52 int n; scanf("%d",&n); 53 if(!n){ 54 printf("Number of doors = 1"); 55 return 0; 56 } 57 double x1,x2,y1,y2,ex,ey; 58 for(int i=1;i<=n;++i){ 59 scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2); 60 L[i]=(Line){(Point){x1,y1},(Point){x2,y2}}; 61 P[i*2]=(Point){x1,y1}; P[i*2-1]=(Point){x2,y2}; 62 } 63 scanf("%lf %lf",&ex,&ey); 64 Point ed=(Point){ex,ey}; 65 int ans=10000000; 66 for(int i=1;i<=2*n;++i){ 67 Line l1=(Line){ed,P[i]}; 68 int tem=0; 69 for(int j=1;j<=n;++j){ 70 if(i==2*j || i==2*j-1) continue; 71 if(inter(l1,L[j])) ++tem; 72 } 73 ans=min(ans,tem); 74 //cerr<<ans<<endl; 75 } 76 //cerr<<ans<<endl; 77 printf("Number of doors = %d",ans+1); 78 return 0; 79 }
View Code
转载于:https://www.cnblogs.com/xiaobuxie/p/11564268.html
【poj-1066】判断线段相交相关推荐
- 判断线段相交(hdu1558 Segment set 线段相交+并查集)
先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...
- 【计算几何】判断线段相交(跨立实验)
题意:有n条线段(编号为1n),按1n的顺序放在二维坐标系上(就是先放1号,再放2号--),要求输出最上面的那些线段的编号.(就是没有其他线段压在它上面的那些线段) 注意:有交点即为被压. 1.叉积 ...
- 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...
- 几何基础之判断线段相交问题
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 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- HDU1086You can Solve a Geometry Problem too(判断线段相交)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- poj 2653 Pick-up sticks(判断线段相交)
题意:在桌上一次放n根木棒,求最上面的木棒编号: 思路:暴力枚举,看每根木棒上是否有木棒: 技巧:使用叉积,判断一个向量的两端点是否在另一向量的同侧,从而判断相交: #include<cstdi ...
最新文章
- python twisted教程_Python Twisted系列教程16:Twisted 进程守护
- 东财在线计算机第一套作业,东财在线21春《计算机网络基础》第一套作业题目及答案...
- cosx的麦克劳林级数是多少_cosx泰勒展开
- Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略
- 公文字体字号标准2020_零秒处理公文格式的三个要点
- WebSocket和Socket
- 时间模块,带Python示例
- 学习Spring Boot:(十四)spring-shiro的密码加密
- 中序线索树和后序线索树
- 面试pythone_叮!你需要的Python面试指南以送到!
- 数据库无响应(hang住)故障处理思路和方法
- c语言变量起别名,typedef可以与此同时为一个类型起两个别名
- BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
- java报错 csrf_CSRF Security Error解决办法
- 如何把 .mobi 格式的电子书转换成 PDF
- 台式电脑桌面没有计算机图标,电脑桌面上“我的电脑”的图标没了怎么办
- Python之父Guido在最近一次采访的最后说了啥
- 彩信文件服务器,彩信服务器怎么设置
- H.264开源解码器评测
- linux运维是什么
热门文章
- 路由器重温——串行链路链路层协议积累-帧中继FR协议
- MI 小米米家智能平台
- Windows系统环境变量大全(XP/Win7/Win8)
- 解开关于人工智能的六个迷思
- 农业种植大数据平台构建
- MFC中picture控件如何响应鼠标移动?
- (14)[驱动开发]配置环境 VS2019 + WDK10 写 xp驱动
- RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍
- Java教务管理系统
- android studio 编译Telegram源码