【刷题】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< ...
随机推荐
- 弄啥嘞?热爱你的Bug
有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者 ...
- TPO-22 C2 Revise a music history paper
第 1 段 1.Listen to part of a conversation between a student and his music history professor. :听一段学生和音 ...
- [Codeforces-911B] - Two Cakes
B. Two Cakestime limit per test 1 secondmemory limit per test 256 megabytesinput standard inputoutpu ...
- PHP核心技术——异常和错误处理
PHP只有手动抛出异常后才能捕获异常 $a = null; try { $a = 5/0; echo $a,PHP_EOL; } catch (exception $e) { $e -> get ...
- 【翻译】HOG, Histogram of Oriented Gradients / 方向梯度直方图 介绍
本文翻译自 SATYA MALLICK 的 "Histogram of Oriented Gradients" 原文链接: https://www.learnopencv.com/ ...
- ats 分层缓存
了解缓存层次结构 缓存层次结构由彼此通信的缓存级别组成.ats支持多种类型的缓存层次结构. 所有缓存层次结构都识别父和子的概念. 父缓存是层次结构中较高的缓存, ats可以 将请求转发到该缓存.子缓存 ...
- 深度学习中数据的augmentation
为了提高模型的泛化能力,同时也为了增大数据集,我们往往需要对数据进行augmentation,在这篇博客中,将总结一下可以对数据进行的augmentation. 1.颜色数据增强,对图像亮度.饱和度. ...
- html , body , margin , overflow 之大乱战
<!DOCTYPE html> <html> <head> <style> html,body{ margin:0 ;padding:0 } div{m ...
- Python从菜鸟到高手:格式化字符串
1. 字符串格式化基础 字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(% ...
- python处理数据pandas视频资料
python强大数据处理工具pandas视频资料:https://pan.baidu.com/s/17VRd1cgFaKi20drfCgZ8Gg