Description

方师傅来到了一个二维平面。他站在原点上,觉得这里风景不错,就建了一个房子。这个房子是n个点的凸多边形
,原点一定严格在凸多边形内部。有m个人也到了这个二维平面。现在你得到了m个人的坐标,你要判断这m个人中
有多少人在房子内部。点在凸多边形边上或者内部都认为在房子里面。

Input

第一行一个数n,接下来n行,每行两个整数x,y。输入按照逆时针顺序输入一个凸包。  
接下来一个数m,最后有m行,第一行两个整数 x,y,表示第一个人的坐标。
对于第i个询问(i>=2) ,输入两个数dx,dy。
如果上一个人在房子内部,x[i]=x[i-1]+dx,y[i]=y[i-1]+dy。否则x[i]=x[i-1]-dx,y[i]=y[i-1]-dy。
n <= 100000, m <= 200000,输入保证所有人的坐标,房屋的坐标都在[-1e9,1e9]之内。

Output

输出一个数,在房子内部人的个数。

对每个询问,二分出凸包上对应位置进行判断,二分时可以用极角,当极角相近时换用叉积以减小误差。

#include<bits/stdc++.h>
typedef long long i64;
char buf[],*ptr=buf;
int _(){
int x=,f=;
while(*ptr<)*ptr++=='-'?f=-:;
while(*ptr>)x=x*+*ptr++-;
return x*f;
}
int n,m,ans=;
double a0;
const double _2pi=std::acos(-)*;
struct pos{
int x,y;
double a;
void ga(){
a=std::atan2(y,x)-a0;
while(a<)a+=_2pi;
while(a>=_2pi)a-=_2pi;
}
bool operator<(const pos&w)const{
if(fabs(a-w.a)>1e-)return a<w.a;
return *this*w>;
}
i64 operator*(const pos&w)const{return i64(x)*w.y-i64(y)*w.x;}
pos operator-(const pos&w)const{return (pos){x-w.x,y-w.y};}
}ps[];
int query(pos p){
p.ga();
pos*p1=std::upper_bound(ps+,ps+n+,p);
if((p1[-]-p)*(p1[]-p)>=)return ++ans,;
return -;
}
int main(){
fread(buf,,sizeof(buf),stdin);
n=_();
for(int i=;i<=n;++i)ps[i].x=_(),ps[i].y=_();
a0=std::atan2(ps[].y,ps[].x);
ps[].a=;
for(int i=;i<=n;++i)ps[i].ga();
ps[n+]=ps[];
m=_();
int x0=_(),y0=_();
for(int i=,la=query((pos){x0,y0});i<=m;++i){
x0+=_()*la,y0+=_()*la;
la=query((pos){x0,y0});
}
printf("%d\n",ans);
return ;
}

bzoj5008: 方师傅的房子的更多相关文章

  1. 【BZOJ5008】方师傅的房子 三角剖分

    [BZOJ5008]方师傅的房子 Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形,原点一定严格在凸多边形内部.有m个人也到 ...

  2. 【刷题】BZOJ 5008 方师傅的房子

    Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形 ,原点一定严格在凸多边形内部.有m个人也到了这个二维平面.现在你得到了m个 ...

  3. 【bzoj5008】方师傅的房子 计算几何

    题目描述 给出一个凸多边形,多次询问某个点是否在这个凸多边形的内部,强制在线. 输入 第一行一个数n,接下来n行,每行两个整数x,y.输入按照逆时针顺序输入一个凸包.   接下来一个数m,最后有m行, ...

  4. 2014 UESTC暑前集训数据结构专题解题报告

    A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集 ...

  5. 2014 UESTC暑前集训动态规划专题解题报告

    A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...

  6. Contest20140705 testB DP

    testB 输入文件: testB.in 输出文件testB.out 时限2000ms 问题描述: 方师傅有两个由数字组成的串 a1,a2,⋯,an 和 b1,b2,⋯,bm.有一天,方师傅感到十分无 ...

  7. UESTC_神秘绑架案 CDOJ 881

    神秘绑架案 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  8. Markdown 编写技巧汇总(一)

    编写文档,有很多格式选择,也有不同平台选择.下面就自己接触到的MarkDown编写文档的各种技巧做简单梳理,供自己参阅,也希望帮到网友. [1]添加空格 ①   这种写法比较老土,但是,很实用!注意都 ...

  9. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

随机推荐

  1. pip windows下的引入

    安装了python以后,并且环境变量里引入了python安装路径后, 想使用pip来安装未安装的模块,但是命令模式里不能执行pip, 查看python安装路径,发现pip跟easy_install的执 ...

  2. Django ---- blog项目学习所得

    一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...

  3. (15)javaScript入门

    什么是javaScript HTML用来做页面的架构,CSS用来做页面样式的布局 javaScript就是用来完成页面用户交互的,JS写的就是叫脚本 js就是弱语言类型,不同类型的时候可以相互转换 j ...

  4. ajax及其工作原理

    1.关于ajax的名字 ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. 2. ...

  5. The Carbon driver has not been ported to 64bits, and very few parts of Windows.Forms will work properly, or at all Stacktrace

    解决地址:https://stackoverflow.com/questions/45776247/mono32-wont-work-mono64-throws-errors 应该是电脑的位与安装的m ...

  6. nginx常用参数设置

    1)隐藏nginx header 版本号 使用curl -I http://www.10.0.3.46 会发现server那里显示版本号 在nginx.conf的http里添加参数server_tok ...

  7. 00centos安装

    CentOS6.9及CentOS7.4的安装详细步骤 安装前的准备工作:1 VMware已经安装好2 镜像文件下载好(在这里,我用的是CentOS-6.9-x86_64-bin-DVD1.iso和Ce ...

  8. try catch 用法实例

  9. 记录:禁用你的元素 bootstrap

    记录:禁用你的元素 bootstrap <script> $(document).ready(function() { $("#target1").css(" ...

  10. Mysql主从同步问题汇总

    data-1-1主机是master,data-1-2是slave Last_IO_Errno: 1236 slave查看show slave status\G; 显示Last_IO_Errno: 12 ...