【刷题】BZOJ 5008 方师傅的房子
Description
Input
Output
Sample Input
-2 -2
2 -2
2 2
-2 2
3
5 5
4 4
0 3
Sample Output
Solution
一个一个找显然是不行的
我们把第一个点作为基点,向其他所有点连边,这样就把凸多边形变成了若干个三角形(伪三角剖分。。)
因为给出的数据是已经排好序了的,所以对于每一个询问,我们先二分找到当前点属于哪一个三角形范围之内
之后就只要判断点是否在三角形之内就行了
还要注意一些小细节,比如凸多边形上1号点和n号点之间的范围,还有精度问题
最开始我写的是atan2的极角排序,后来怎么调也没过,现在还不知道是什么原因
后来对于每一凸包上的每一个点i,我们判断询问的点x是否在1点与i点连边的“左”方,一样可以达到效果
#include<bits/stdc++.h>
#define ll long long
const int MAXN=+,MAXM=+;
int n,m,x[MAXM],y[MAXM],ans,pre;
struct node{
int x,y;
double angle;
inline bool operator < (const node &A) const {
return angle<A.angle;
};
inline node operator - (const node &A) const {
node tmp;
tmp.x=x-A.x;
tmp.y=y-A.y;
return tmp;
};
};
node point[MAXN];
template<typename T> inline void read(T &x)
{
T data=,w=;
char ch=;
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')w=-,ch=getchar();
while(ch>=''&&ch<='')data=((T)data<<)+((T)data<<)+(ch^''),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char c='\0')
{
if(x<)putchar('-'),x=-x;
if(x>)write(x/);
putchar(x%+'');
if(c!='\0')putchar(c);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline ll cross(node a,node b)
{
return (ll)a.x*(ll)b.y-(ll)b.x*(ll)a.y;
}
inline bool check(int dx,int dy)
{
node q;
q.x=dx;q.y=dy;
if(cross(point[]-point[],q-point[])<)return false;
if(cross(point[n]-point[],q-point[n])>)return false;
int l=,r=n+;
while(l<r)
{
int mid=(l+r)>>;
if(cross(point[mid]-point[],q-point[mid])>)l=mid+;
else r=mid;
}
if(cross(point[l]-point[l-],q-point[l])>=)return true;
else return false;
}
int main()
{
read(n);
for(register int i=;i<=n;++i)read(point[i].x),read(point[i].y);
read(m);
for(register int i=;i<=m;++i)
{
read(x[i]);read(y[i]);
if(i==);
else if(pre)x[i]=x[i-]+x[i],y[i]=y[i-]+y[i];
else x[i]=x[i-]-x[i],y[i]=y[i-]-y[i];
if(check(x[i],y[i]))ans++,pre=;
else pre=;
}
write(ans,'\n');
return ;
}
5008 方师傅的房子
【刷题】BZOJ 5008 方师傅的房子的更多相关文章
- 【BZOJ5008】方师傅的房子 三角剖分
[BZOJ5008]方师傅的房子 Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形,原点一定严格在凸多边形内部.有m个人也到 ...
- bzoj5008: 方师傅的房子
Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形 ,原点一定严格在凸多边形内部.有m个人也到了这个二维平面.现在你得到了m个 ...
- 【bzoj5008】方师傅的房子 计算几何
题目描述 给出一个凸多边形,多次询问某个点是否在这个凸多边形的内部,强制在线. 输入 第一行一个数n,接下来n行,每行两个整数x,y.输入按照逆时针顺序输入一个凸包. 接下来一个数m,最后有m行, ...
- C#LeetCode刷题之#633-平方数之和( Sum of Square Numbers)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3885 访问. 给定一个非负整数 c ,你要判断是否存在两个整数 ...
- C#LeetCode刷题-数学
数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...
- 【刷题】BZOJ 2407 探险
Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...
- 【刷题】BZOJ 4543 [POI2014]Hotel加强版
Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...
- 【刷题】BZOJ 4316 小C的独立集
Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使 ...
- 【刷题】BZOJ 4176 Lucas的数论
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...
随机推荐
- flask中的宏
对于flask中的宏编程.我们使用 macro 来对宏起个名称 宏编程 对于我们来说是减少了代码的重用.以及简化了标签的操作,对与开发效率有很大的提升, 在html中.相信大多数都用到了.input ...
- appium 元素定位方法汇总
以上图为例,要定位到右下角的 我的 ,并点击 # appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_e ...
- Webrtc源码走读(一)
阅读event_wrapper.h event_wrapper_win.cpp 的实现 自己对“事件”这个词没有深的理解,通过看段代码,好像有点感觉,类似与C#的AutoResetEvent
- ExternalAccessory串口通信
ExternalAccessory 使用文档 项目下载地址 前言 公司希望通过串口通信的方式实现苹果手机与公司产品进行通信,通过Lighting接口,也就是苹果的数据线.苹果的API External ...
- Python数据分析工具库-Numpy 数组支持库(二)
1 shape变化及转置 >>> a = np.floor(10*np.random.random((3,4))) >>> a array([[ 2., 8., 0 ...
- 基础业务:滚动到指定位置导航固定(CSS实现)
最近公司做的业务都是使用Vue.Element写的,涉及到的相应的基础业务像轮播.预加载.懒加载,都是使用 NPM上的工具来实现,原理和基础还是要有的,就来实现几个项目中常用到的业务. 经常见到这样的 ...
- 面向对象OO第5-7次作业总结
面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租 ...
- 项目Beta冲刺(团队)随笔集
凡事预则立 项目Beta冲刺准备 第一天 项目Beta冲刺(团队)第一天 第二天 项目Beta冲刺(团队)第二天 第三天 项目Beta冲刺(团队)第三天 第四天 项目Beta冲刺(团队)第四天 第五天 ...
- 灵悟礼品网上专卖店Sprint计划
一.现状 小组成员初步了解了所做项目的大致内容,需要时间一步一步分析和规划. 二.部分需求索引卡 第一个阶段没有具体功能的实现,只是先把所要做的项目思路理清,并把相应的数据库建立好. 三.任务认领 产 ...
- pktgen-dpdk 运行 run.py 报错 Config file 'default' not found 解决方法
pktgen 操作手册:http://pktgen-dpdk.readthedocs.io/en/latest/getting_started.html 执行到这一步时: $ cd <Pktge ...