poj3130 (半平面交
题意:判断是否存在内核。
半平面交存板子。
/* gyt
Live up to every day */
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>`
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = 1e4+;
const ll maxm = 1e7;
const ll mod = 1e9 + ;
const int INF = 0x3f3f3f;
const int inf =0x3f3f3f;
const db eps = 1e-;
const int kind=;
struct point {
double x,y;
point(double x=,double y=): x(x),y(y){}
}an[maxn], bn[maxn], cn[maxn];
typedef point Vector;
Vector operator +(point a,point b) {
return Vector(a.x+b.x,a.y+b.y);
}
Vector operator *(point a,double b) {
return Vector(a.x*b,a.y*b);
}
Vector operator -(point a,point b) {
return Vector(a.x-b.x,a.y-b.y);
}
double dot(Vector a,Vector b) { //内积
return a.x*b.x+a.y*b.y;
}
double cross(Vector a,Vector b) { //外积
return a.x*b.y-a.y*b.x;
}
int n, m;
db A, B, C;
//获取Ax+By+c=0
void getline(point a, point b) {
A=b.y-a.y;
B=a.x-b.x;
C=b.x*a.y-a.x*b.y;
}
//getline()得到的直线与点a,b构成直线的交点
point intersect(point a, point b) {
db u=fabs(A*a.x+B*a.y+C);
db v=fabs(A*b.x+B*b.y+C);
point ans;
ans.x=(a.x*v+b.x*u)/(u+v);
ans.y=(a.y*v+b.y*u)/(u+v);
return ans;
}
void cut() {
int cnt=;
for (int i=; i<=m; i++) {
if (A*cn[i].x+B*cn[i].y+C>=) bn[++cnt]=cn[i];
else {
if (A*cn[i-].x+B*cn[i-].y+C>) {
bn[++cnt]=intersect(cn[i-], cn[i]);
}
if (A*cn[i+].x+B*cn[i+].y+C>) {
bn[++cnt]=intersect(cn[i+], cn[i]);
}
}
}
for (int i=; i<=cnt; i++) {
cn[i]=bn[i];
}
cn[]=bn[cnt];
cn[cnt+]=bn[];
m=cnt;
}
void deal() {
for (int i=; i<=n; i++) {
cn[i]=an[i];
}
an[n+]=an[];
cn[n+]=an[];
cn[]=an[n];
m=n;
for (int i=; i<=n; i++) {
getline(an[i], an[i+]);
cut();
}
}
void solve() {
while(scanf("%d", &n)!=EOF && n) {
for (int i=; i<=n; i++) {
scanf("%lf%lf", &an[i].x, &an[i].y);
}
reverse(an+, an++n);
deal();
if (m) puts("");
else puts("");
}
}
int main() {
int t = ;
//freopen("in.txt", "r", stdin);
// scanf("%d", &t);
while(t--)
solve();
return ;
}
poj3130 (半平面交的更多相关文章
- 【BZOJ-4515】游戏 李超线段树 + 树链剖分 + 半平面交
4515: [Sdoi2016]游戏 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 304 Solved: 129[Submit][Status][ ...
- poj3335 半平面交
题意:给出一多边形.判断多边形是否存在一点,使得多边形边界上的所有点都能看见该点. sol:在纸上随手画画就可以找出规律:按逆时针顺序连接所有点.然后找出这些line的半平面交. 题中给出的点已经按顺 ...
- POJ3525 半平面交
题意:求某凸多边形内部离边界最远的点到边界的距离 首先介绍半平面.半平面交的概念: 半平面:对于一条有向直线,它的方向的左手侧就是它所划定的半平面范围.如图所示: 半平面交:多个半平面的交集.有点类似 ...
- POJ 3130 How I Mathematician Wonder What You Are! /POJ 3335 Rotating Scoreboard 初涉半平面交
题意:逆时针给出N个点,求这个多边形是否有核. 思路:半平面交求多边形是否有核.模板题. 定义: 多边形核:多边形的核可以只是一个点,一条直线,但大多数情况下是一个区域(如果是一个区域则必为 ).核内 ...
- bzoj2618[Cqoi2006]凸多边形 半平面交
这是一道半平面交的裸题,第一次写半平面交,就说一说我对半平面交的理解吧. 所谓半平面交,就是求一大堆二元一次不等式的交集,而每个二元一次不等式的解集都可以看成是在一条直线的上方或下方,联系直线的标准方 ...
- POJ 3384 Feng Shui 半平面交
题目大意:一个人很信"Feng Shui",他要在房间里放两个圆形的地毯. 这两个地毯之间可以重叠,可是不能折叠,也不能伸到房间的外面.求这两个地毯可以覆盖的最大范围.并输出这两个 ...
- BZOJ2618[Cqoi2006]凸多边形——半平面交
题目描述 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. 输入 第一行有一个整数n,表示凸多边形的个数,以下依次描述各个多边形.第 ...
- 洛谷P3222 [HNOI2012]射箭(计算几何,半平面交,双端队列)
洛谷题目传送门 设抛物线方程为\(y=ax^2+bx(a<0,b>0)\),我们想要求出一组\(a,b\)使得它尽可能满足更多的要求.这个显然可以二分答案. 如何check当前的\(mid ...
- bzoj 4445 小凸想跑步 - 半平面交
题目传送门 vjudge的快速通道 bzoj的快速通道 题目大意 问在一个凸多边形内找一个点,连接这个点和所有顶点,使得与0号顶点,1号顶点构成的三角形是最小的概率. 假设点的位置是$(x, y)$, ...
随机推荐
- [UE4]Button
一.按钮有4种状态:Normal(普通状态).Hovered(鼠标悬停状态).Pressed(鼠标按下状态).Disabled(禁用状态),可以分别给每种状态设置样式. 二.按钮有如图所示的5个事件, ...
- laravel代码生成器的记录
在使用laravel5.5时,关于代码生成器还有很多的功能不明白 是么回事,在此先记录下来过程. 1.composer reqiure summerblue/generator --dev php a ...
- gentoo emerge L10N
gentoo 中安装软件的时候 emerge 提示 USE 中有 语言包可选安装,使用 L10N 来设置,设置方法是在USE中使用 l10n_,比如说 l10n_zh_CN 来安装中文支持包.
- spring boot 错误处理之深度历险
今天终于把 boot 的异常处理完全研究透了: boot提供了很多错误的处理工作.默认情况下,我们会看到一个whiteLabel(白标)的页面. 这个可能不是我们所需.因此我们需要定制.我于是做了个深 ...
- leetcode543
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- win2012R2打Windows8.1-KB2919355 问题
解决方法 https://blog.csdn.net/qwq1503/article/details/65916426
- RGB颜色值转化为long 型数字
通常我们表达颜色都是使用RGB值表示的,今天在VB中设置RGB值居然是一个整形数字,网上各种搜资料发现这个数字是怎么来的: 数值= 65536*Blue + 256* Green + Red
- 目标检测之faster-RCNN和FPN
今年(2017年第一季度),何凯明大神出了一篇文章,叫做fpn,全称是:feature pyramid network for object Detection,为什么发这篇文章,根据 我现在了解到的 ...
- 数据库启动windows
1.上 MongoDB官网下载数据库,下载之后选择自己想放的文件夹要记住文件夹位置,比如我下载之后就放在D盘,改文件夹为 mongodb 2.启动之前要给mongodb指定一个文件夹,这里取名为&qu ...
- 更改Oracle字符集避免乱码
如何更改Oracle字符集避免乱码 转一位大神的笔记. 国内最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能够支持繁体中文,并且按照2个字符长 ...