题目链接: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】判断线段相交相关推荐

  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. 几何基础之判断线段相交问题

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

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

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

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

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

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

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

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

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

  9. 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 ...

  10. poj 2653 Pick-up sticks(判断线段相交)

    题意:在桌上一次放n根木棒,求最上面的木棒编号: 思路:暴力枚举,看每根木棒上是否有木棒: 技巧:使用叉积,判断一个向量的两端点是否在另一向量的同侧,从而判断相交: #include<cstdi ...

最新文章

  1. python twisted教程_Python Twisted系列教程16:Twisted 进程守护
  2. 东财在线计算机第一套作业,东财在线21春《计算机网络基础》第一套作业题目及答案...
  3. cosx的麦克劳林级数是多少_cosx泰勒展开
  4. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略
  5. 公文字体字号标准2020_零秒处理公文格式的三个要点
  6. WebSocket和Socket
  7. 时间模块,带Python示例
  8. 学习Spring Boot:(十四)spring-shiro的密码加密
  9. 中序线索树和后序线索树
  10. 面试pythone_叮!你需要的Python面试指南以送到!
  11. 数据库无响应(hang住)故障处理思路和方法
  12. c语言变量起别名,typedef可以与此同时为一个类型起两个别名
  13. BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
  14. java报错 csrf_CSRF Security Error解决办法
  15. 如何把 .mobi 格式的电子书转换成 PDF
  16. 台式电脑桌面没有计算机图标,电脑桌面上“我的电脑”的图标没了怎么办
  17. Python之父Guido在最近一次采访的最后说了啥
  18. 彩信文件服务器,彩信服务器怎么设置
  19. H.264开源解码器评测
  20. linux运维是什么

热门文章

  1. 路由器重温——串行链路链路层协议积累-帧中继FR协议
  2. MI 小米米家智能平台
  3. Windows系统环境变量大全(XP/Win7/Win8)
  4. 解开关于人工智能的六个迷思
  5. 农业种植大数据平台构建
  6. MFC中picture控件如何响应鼠标移动?
  7. (14)[驱动开发]配置环境 VS2019 + WDK10 写 xp驱动
  8. RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍
  9. Java教务管理系统
  10. android studio 编译Telegram源码