只需要判断就行了 不需要正宗的半平面交

/*Point operator & (Line A,Line B)
{Point C=A.s;double t=((A.s-B.s)^(B.s-B.e))/((A.s-A.e)^(B.s-B.e));C.x+=(A.e.x-A.s.x)*t; C.y+=(A.e.y-A.s.y)*t;return C;
}半平面交
1.首先规定逆时针给点 判断的时候直接求有向面积 面积为负则是顺时针给的点
2.极角排序 (可以去重 留下靠左的一个)
3.模拟双端队列 判断队列尾部两线的交点和头部两线的交点在新加入线段哪一侧 左侧即合法 直接加入 右侧即不合法 删掉堆尾
4.因为我们 3 过程中始终保持队列数量至少为2 所以最后判断头部和尾部的合法性剩下的边<=2条的话 说明不存在内核
NOTE: 此题特殊 之存在上下左右方向的线  最后决定的线也只有4条 可以直接判断 不用打半平面交所以&交点也不需要考虑两线平行的情况
*/
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=150;
const double eps=1e-9;
struct Point
{double x,y;Point(){}Point(double _x,double _y){x=_x,y=_y;}
}p[N];
struct Line
{Point s,e;Line(){}Line(Point _s,Point _e){s=_s,e=_e;}
}l[N],q[N];
int n,T;
Point operator - (Point A,Point B) {return Point(A.x-B.x,A.y-B.y);}
double operator ^ (Point A,Point B) {return A.x*B.y-A.y*B.x;}
Point operator & (Line A,Line B)
{Point C=A.s;double t=((A.s-B.s)^(B.s-B.e))/((A.s-A.e)^(B.s-B.e));C.x+=(A.e.x-A.s.x)*t; C.y+=(A.e.y-A.s.y)*t;return C;
}
bool Isf() // 判断给出的点是否是逆时针的
{double res=0;for(int i=2;i<n;i++) res+=((p[i]-p[1])^(p[i+1]-p[1]));return res>eps;
}
bool check(Line a,Line b,Line c) // 判断 a,b的交点是否在c的左侧包括线上
{Point d=a&b; return ((d-c.s)^(c.e-c.s))<eps;
}
int from(Line a) //  up left down right
{Point A=a.e-a.s;if(A.x==0&&A.y>0) return 1;else if(A.x<0&&A.y==0) return 2;else if(A.x==0&&A.y<0) return 3;else return 4;
}
bool cmp(Line a,Line b)
{int f1=from(a),f2=from(b);if(f1!=f2) return f1<f2;return ((a.s-b.s)^(b.e-b.s))<eps;
}
bool solve()
{sort(l+1,l+n+1,cmp); int top=1;for(int i=2;i<=n;i++) if(from(l[i])!=from(l[top])) l[++top]=l[i];Line up,left,right,down;up=l[1];left=l[2];down=l[3];right=l[4];
//printf("    up : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[1].s.x,l[1].s.y,l[1].e.x,l[1].e.y);
//printf("    left : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[2].s.x,l[2].s.y,l[2].e.x,l[2].e.y);
//printf("    down : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[3].s.x,l[3].s.y,l[3].e.x,l[3].e.y);
//printf("    right : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[4].s.x,l[4].s.y,l[4].e.x,l[4].e.y);
//printf("    up : (%.2lf,%.2lf)\n",up.x,up.y);
//printf("    left : (%.2lf,%.2lf)\n",left.x,left.y);
//printf("    down : (%.2lf,%.2lf)\n",down.x,down.y);
//printf("    right : (%.2lf,%.2lf)\n",right.x,right.y);if(up.s.x-down.s.x<-eps)return 0;if(left.s.y-right.s.y<-eps) return 0;return 1;
}
int main()
{while(scanf("%d",&n)&&n){T++; for(int i=1;i<=n;i++){double x,y;scanf("%lf%lf",&x,&y);p[i]=Point(x,y);}if(!Isf()) for(int i=1;i<=(n>>1);i++) swap(p[i],p[n-i+1]);p[n+1]=p[1]; for(int i=1;i<=n;i++) l[i]=Line(p[i],p[i+1]);printf("Floor #%d\n",T);if(solve()) puts("Surveillance is possible."); else puts("Surveillance is impossible.");putchar('\n');}return 0;
}
/*
bian8
1 0
1 1
0 1
0 3
1 3
1 2
2 2
2 0dian8
1 1
0 1
0 2
1 2
1 1
2 1
2 0
1 0*/

转载于:https://www.cnblogs.com/lxy8584099/p/10421746.html

POJ 1474 Video Surveillance相关推荐

  1. poj 1474 Video Surveillance - 求多边形有没有核

    /* poj 1474 Video Surveillance - 求多边形有没有核*/ #include <stdio.h> #include<math.h> const do ...

  2. POJ 1474 Video Surveillance(半平面交)

    题意:半平面交求多边形内核(我明明及的我之前是会用kuangbin第一份版平面交的,现在怎么就不会用了呢,补第二份代码) 代码: #include<cstdio> #include< ...

  3. POJ 1474 Video Surveillance(半平面交)

    思路:半平面交裸题,要注意是顺时针给点. #include<iostream> #include<cstdio> #include<cstring> #includ ...

  4. ZTE Unveils World's First WiMAX Mobile Video Surveillance Terminal

    asy to install WiMAX device ideal for deployment in strategic public areas 08 January 2009, Shenzhen ...

  5. Camera Vision - video surveillance on C#

    http://www.codeproject.com/KB/audio-video/cameraviewer.aspx 开发的资源 介绍: 纵观当今的监控系统的发展趋势,能很容易发现基于IP的解决方案 ...

  6. VSAM:视频监控系统 A System for Video Surveillance and Monitoring

    VSAM(VideoSurveillance and Monitoring)视频监控系统 Robotics Institute CMU 1:引言 2:试验床介绍 3:基本的视频分析算法:运动目标检测, ...

  7. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

  8. [Z]POJ 计算几何入门题目推荐[转PKKJ]

    http://www.cnblogs.com/eric-blog/archive/2011/05/31/2064785.html http://hi.baidu.com/novosbirsk/blog ...

  9. poj计算几何题推荐

    POJ 计算几何入门题目推荐(转)       其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...

最新文章

  1. Java Applet读写client串口——终极篇
  2. jupyter notebook的链接密码 token查询 以及 pycharm 如何使用 jupyter notebook
  3. python数据库在哪_python可以用哪些数据库
  4. P3085 [USACO13OPEN]Yin and Yang G 点分治
  5. 一个切图仔的 CSS 笔记
  6. 制作 Windows8   to Go
  7. 单行文本与多行文本省略文本
  8. JavaEE基础(01):Servlet实现方式,生命周期执行过程
  9. 1043. 输出PATest(20)-PAT乙级真题
  10. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
  11. Cesium:加载本地高程/地形数据
  12. Python网络爬虫第一弹《Python网络爬虫相关基础概念》
  13. 稳健估计,P范数最小法
  14. 投稿选刊必备,2021较全的国内SCI期刊汇总整理
  15. PPT的配色方法(师从于珞珈老师)
  16. SAP库存--历史库存相关数据,以及库存变化对应表的数据变化,可以用于库龄分析报表逻辑设计。
  17. 非计算机专业学生怎么走上计算机技术之路?
  18. Py遇到Bad key “text.kerning_factor“ on line 4 in
  19. Macbook百度网盘不限速下载
  20. dubbo的常用容错机制

热门文章

  1. GT1030和730哪个好?GT1030与GT730区别对比 (全文)
  2. c语言 浮点数的加减乘除,浮点数的加减乘除运算步骤
  3. 像素游戏的动态图设计01
  4. php socket read参数,PHP里的socket_read和socket_recv
  5. [汇编语言]DOS下的dubug的标志位的英文全名(助记忆)
  6. x86能代替power pc架构吗_你是愿意为x86打工一辈子,还是用上自己的POWER平台?...
  7. 语气词、拟声词、动作与哭、量词、标点、特殊的符号
  8. Android 添加水印相册
  9. Java——JLabel文本
  10. 百度生成式AI产品文心一言邀请测试,五大场景、五大能力革新生产力工具