bzoj5008: 方师傅的房子
Description
Input
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: 方师傅的房子的更多相关文章
- 【BZOJ5008】方师傅的房子 三角剖分
[BZOJ5008]方师傅的房子 Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形,原点一定严格在凸多边形内部.有m个人也到 ...
- 【刷题】BZOJ 5008 方师傅的房子
Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形 ,原点一定严格在凸多边形内部.有m个人也到了这个二维平面.现在你得到了m个 ...
- 【bzoj5008】方师傅的房子 计算几何
题目描述 给出一个凸多边形,多次询问某个点是否在这个凸多边形的内部,强制在线. 输入 第一行一个数n,接下来n行,每行两个整数x,y.输入按照逆时针顺序输入一个凸包. 接下来一个数m,最后有m行, ...
- 2014 UESTC暑前集训数据结构专题解题报告
A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集 ...
- 2014 UESTC暑前集训动态规划专题解题报告
A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...
- Contest20140705 testB DP
testB 输入文件: testB.in 输出文件testB.out 时限2000ms 问题描述: 方师傅有两个由数字组成的串 a1,a2,⋯,an 和 b1,b2,⋯,bm.有一天,方师傅感到十分无 ...
- UESTC_神秘绑架案 CDOJ 881
神秘绑架案 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- Markdown 编写技巧汇总(一)
编写文档,有很多格式选择,也有不同平台选择.下面就自己接触到的MarkDown编写文档的各种技巧做简单梳理,供自己参阅,也希望帮到网友. [1]添加空格 ① 这种写法比较老土,但是,很实用!注意都 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
随机推荐
- linux最常用的20个命令
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- 阮一峰关于reduce 和transduce的博客
http://www.ruanyifeng.com/blog/2017/03/reduce_transduce.html
- ZOJ 1007:Numerical Summation of a Series(数学)
Numerical Summation of a Series Time Limit: 10 Seconds Memory Limit: 32768 KB Special Judg ...
- java-BigDecimal类
1.BigDecimal类的概述和方法使用 * A:BigDecimal的概述 * 由于在运算的时候,float类型和double很容易丢失精度. * 所以,为了能精确的表示.计算浮点数,Java提供 ...
- 【BZOJ1497】【NOI2006】最大获利
最小割好劲啊 原题: 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项 ...
- 【mybatis源码学习】mybtias知识点
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍 ...
- oracle-闪回技术1
http://blog.csdn.net/lqx0405/article/details/44776737 Oracle Study案例之--基于表空间的时间点恢复(TSPITR) DBPITR 数 ...
- 我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis
Redis 的 安装 是 复杂 的, 使用 是 复杂 的, Redis 的 功能 是 重型 的, Redis 本身的 技术实现 是 复杂 的 . Redis 是用 C 写的, C 语言 编写的代码需要 ...
- 推荐一个 基于 WebSocket 和 Redis 的 即时通信 开源项目
项目地址 : https://github.com/2881099/im 大家可以和 SignalR 比较看看 , 如何 ? ^^ ^^ ^^ 这是一个 网友 写的 , 他还写了 ...
- JavaScript编码风格
最近在看前端大牛Nicbolas C.Zakas的<编写可维护的JavaScript代码>一书.觉得里面的很多知识点都写的很好,所以,就写篇博文,总结一下吧!编码规范对于程序设计来说是很重 ...