[poj3130][半平面交]How I Mathematician Wonder What You Are!
传送门
http://poj.org/problem?id=3130
题意:
判断多边形的核是否存在
sol:
半平面交,满足所有半平面的区域显然就是核。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long ll;
typedef double s64;
int n,m;
inline int read()
{char c;int res,flag=0;while((c=getchar())>'9'||c<'0') if(c=='-')flag=1;res=c-'0';while((c=getchar())>='0'&&c<='9') res=(res<<3)+(res<<1)+c-'0';return flag?-res:res;
}
const int N=110;
const s64 eps=1e-7;
struct P
{s64 x,y;friend P operator +(P a,P b) {return (P){a.x+b.x,a.y+b.y};}friend P operator -(P a,P b) {return (P){a.x-b.x,a.y-b.y};}friend P operator *(P a,s64 b) {return (P){a.x*b,a.y*b};}friend s64 operator *(P a,P b) {return a.x*b.y-a.y*b.x;}friend s64 operator /(P a,P b) {return a.x*b.x+a.y*b.y;}
}a[N];
struct L
{P a,b,v;s64 ang;friend bool operator <(L a,L b) {return a.ang<b.ang||a.ang==b.ang&&a.v*(b.b-a.a)>0;}friend inline P inter(L a,L b){P nw=b.a-a.a;s64 tt=(nw*a.v)/(a.v*b.v);return b.a+b.v*tt;}friend inline bool jud(P a,L b) {return b.v*(a-b.a)<0;}
}q[N],l[N];
int main()
{
// freopen("3130.in","r",stdin);
// freopen(".out","w",stdout);while(true){n=read();if(!n) break;int tot=0;for(int i=1;i<=n;++i){a[i].x=read();a[i].y=read();}a[n+1]=a[1];for(int i=1;i<=n;++i){l[i].a=a[i];l[i].b=a[i+1];l[i].v=a[i+1]-a[i];l[i].ang=atan2(l[i].v.y,l[i].v.x);}sort(l+1,l+1+n);for(int i=1;i<=n;++i)if(l[i].ang!=l[i-1].ang) l[++tot]=l[i];n=tot;q[1]=l[1];q[2]=l[2];int R=2;int L=1;for(int i=3;i<=n;++i){while(L<R&&jud(inter(q[R-1],q[R]),l[i])) --R;while(L<R&&jud(inter(q[L],q[L+1]),l[i])) ++L;q[++R]=l[i];}while(L<R&&jud(inter(q[R],q[R-1]),q[L])) --R;while(L<R&&jud(inter(q[L+1],q[L]),q[R])) ++L;if(R-L+1>=3) printf("1\n");else printf("0\n");}
}
[poj3130][半平面交]How I Mathematician Wonder What You Are!相关推荐
- 半平面交练习(计算几何)
四:半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #i ...
- UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)
整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...
- POJ 1474 Video Surveillance(半平面交)
题意:半平面交求多边形内核(我明明及的我之前是会用kuangbin第一份版平面交的,现在怎么就不会用了呢,补第二份代码) 代码: #include<cstdio> #include< ...
- LA 2218 (半平面交) Triathlon
题意: 有n个选手,铁人三项有连续的三段,对于每段场地选手i分别以vi, ui 和 wi匀速通过. 对于每个选手,问能否通过调整每种赛道的长度使得他成为冠军(不能并列). 分析: 粗一看,这不像一道计 ...
- POJ3335(半平面交)
POJ3335 半平面交裸题 //poj3335 #include <cstdio> #include <cmath> #include <algorithm> # ...
- LA 3890 (半平面交) Most Distant Point from the Sea
题意: 给出一个凸n边形,求多边形内部一点使得该点到边的最小距离最大. 分析: 最小值最大可以用二分. 多边形每条边的左边是一个半平面,将这n个半平面向左移动距离x,则将这个凸多边形缩小了.如果这n个 ...
- [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线: ...
- 模板:半平面交(计算几何)
所谓半平面交,就是和"半平先生"当面交谈.顾名思义,这是一个源于日本的算法. (逃) 前言 感觉应用很灵活的一个算法,一切有两个变量的线性规划问题都可以转化为半平面交. 有时可能要 ...
- P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】
正题 题目链接:https://www.luogu.com.cn/problem/P4196 题目大意 给出nnn个凸多边形,求它们交的面积. 解题思路 就是把凸多边形上每条边作为一个半平面限制然后求 ...
最新文章
- 《Cell》新发现!“第二大脑”的反击
- 设计模式6——创建型模式之原型模式
- Anaconda中Jupyter notebook打开后闪退问题解决方法
- 后台服务系统之什么是dubbo
- 欺诈行为识别_使用R(编程)识别欺诈性的招聘广告
- 华平助广东海事局构建水上搜救应急指挥系统
- 漢城博殺的日子 (四)
- Linux 内核修正 5 年历史的严重 bug
- 学习HttpClient,从两个小例子开始
- 数学建模算法与应用(目录)
- arduino入门(一)arduino下载安装,炒鸡详解
- c4d如何把文字贴在物体表面_C4D在简模上整体和局部贴贴图的方法
- 从虚拟偶像到“网红”VUP,变现狂欢下的浮士德交易
- 信息系统项目管理师和PMP对比
- 【招聘】上海微创医疗机器人集团 - 软件工程师/图像算法工程师
- 为什么老程序员的效率如此高?编程速度快,Bug数量又少?
- 再见,搜不准的百度!你好,6个精准搜索技巧(还可以屏蔽广告哦~)
- 【Educoder】HTML答案 (HTML入门——基础、HTML入门——基本标签、HTML——表单类的标签)
- ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础
- 搬砖篇--002 几何入门基础知识