bzoj5008: 方师傅的房子

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[10000007],*ptr=buf;
int _(){
    int x=0,f=1;
    while(*ptr<48)*ptr++==‘-‘?f=-1:0;
    while(*ptr>47)x=x*10+*ptr++-48;
    return x*f;
}
int n,m,ans=0;
double a0;
const double _2pi=std::acos(-1)*2;
struct pos{
    int x,y;
    double a;
    void ga(){
        a=std::atan2(y,x)-a0;
        while(a<0)a+=_2pi;
        while(a>=_2pi)a-=_2pi;
    }
    bool operator<(const pos&w)const{
        if(fabs(a-w.a)>1e-6)return a<w.a;
        return *this*w>0;
    }
    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[100007];
int query(pos p){
    p.ga();
    pos*p1=std::upper_bound(ps+1,ps+n+1,p);
    if((p1[-1]-p)*(p1[0]-p)>=0)return ++ans,1;
    return -1;
}
int main(){
    fread(buf,1,sizeof(buf),stdin);
    n=_();
    for(int i=1;i<=n;++i)ps[i].x=_(),ps[i].y=_();
    a0=std::atan2(ps[1].y,ps[1].x);
    ps[1].a=0;
    for(int i=2;i<=n;++i)ps[i].ga();
    ps[n+1]=ps[1];
    m=_();
    int x0=_(),y0=_();
    for(int i=2,la=query((pos){x0,y0});i<=m;++i){
        x0+=_()*la,y0+=_()*la;
        la=query((pos){x0,y0});
    }
    printf("%d\n",ans);
    return 0;
}
时间: 2024-10-18 02:57:27

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

2014 UESTC Training for Data Structures K - 方师傅与栈

K - 方师傅与栈 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 方师傅有一个1?N的排列,排列的顺序是固定的,他想要把这个排列重新排列成他喜欢的顺序. 于是他买了一个栈,他会按顺序将排列扔进栈内,在某些时刻将栈顶元素取出,这样出栈后的排列就可以重新排序啦. 例如,原序列是1,2,他先将1入栈,再将2入栈,然后将2出栈,最后将1出栈,那么新序列就变

2014 UESTC Training for Data Structures J - 方师傅的01串

J - 方师傅的01串 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 方师傅过生日啦,于是蟹毛买了N个01串,想送给方师傅. 但是蟹毛觉得这些01串不够美,于是他想从中选出一些送给方师傅. 蟹毛对于p个01串的美值定义为: 这些01串的最长公共前缀的长度×p 所以蟹毛想从N个01串中选出一些,使得这些01串的美值最高. 请告诉蟹毛最好的美值是多少.

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

A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集合.同时将这些数字也排一个序,降低枚举的复杂度.合并集合时向四周查询浮出水面但是没有合并到同一集合的点进行合并. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath&

观《归来》,写《后感》

电影<归来>观后感 前前后后,我花了超过两个礼拜的时间,完成了@刘大宝 老师布置的作业,一份沉重的作业:观<归来>,写<后感>. 我是分割线 本来,我想得过且过,试着用我多年练就的微博体描述老谋子的这部电影:一个老头二十余年未见老伴,老伴患病认不得人了,老头三番五次努力,老伴不见好转,结果终此一生的故事. 好吧,太少,详细点就是. 继续分割线 <归来>演的是:一个逃犯回家找女人私奔,结果被女儿发现告了密,在火车站上演了一场激烈的“抓逃”矛盾. 第一场大概,应

你真的知道什么是三观吗?

很多年轻人(虽然我也很年轻)的择偶标准上都写着三观一致,我就好奇你还三观一致,你知道自己什么三观吗? 三观即是人生观.价值观.世界观(这个并没什么卵用)通俗的讲,人生观是人这辈子应该怎么活做什么样的人,价值观是人这辈子什么才是最珍贵的什么是值得追求的坚持的,世界观是这个世界是怎么样的.其实也就两观,世界观好像跟我们没多大关系,你认为美国会打朝鲜吗,会打我们吗?你认为中国会收复台湾吗?不是政治人物,这确实不怎么关我们的事,说句不好听的,中国本来就是一个朝代更替的国家,外族入侵也不是一次两次,用袁腾

UESTC_神秘绑架案 CDOJ 881

神秘绑架案 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 冬马被方师傅绑架了!!! 一天,春希收到了一个信封,里面有一张印有8×8棋盘的纸,一个被加了密的U盘和一个便条.便条上写着: 冬马在我手上,如果你想救出冬马,U盘里就有我详细的地址,当然前提是你能解出密码! 你可以把这个棋盘分割成n块,每一次你可以从一棋盘上割下一块矩形,并让剩下的部分也是矩

《归来》,焉归来兮 - 电影影评网

文: 娴雅 <归来>,焉归来兮 --片子<归来>观后感 老谋子就是老谋子,出手必定非凡! 张艺谋以一部<归来>的电影触动了我的灵魂深处,让我有一种写作的激动,变形金刚.早在网上看见一些报导说是一批50后60后的观众是从头到尾哭着看完这部电影的,就连获诺贝尔文学奖的莫言也未能幸免.我没有看过严歌苓的原著,如此泪奔的电影我这个经历过文革的60后也一定要去看看了.今天终于一睹为快.很奇异我这个泪腺也算发达的人竟然没有留下一滴眼泪,只是眼圈红了红,惋惜了我当时筹备好的一叠纸巾.

消息与消息队列

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 释讯韭肪琢欢放染颖蚕良兑敢冶辽沙云

用两种方式估计北京一年出租出去的房子数量,并互相验证。(滴滴打车-2014)

详解: 可以采取两种方法. 方法一: (1)分析问题 北京一年出租出去的房子数量,租房是一个强需求,稳定有房的居民不会去租房,无房但已经租房的人不会去租房,无房且需要居住房子的人才会去租房,也是我们需要关注的群体.这部分群体可分为城市务工服务人员(蓝领).应届工作大学生(准白领).工作变动的职员(白领及以上).其他(需居住中期以上的自由职业者.看病和旅游人群) (2)细分完善 上述分解的要素中,城市务工服务人员可以按照行业属性继续挖掘出变动居住地点的频率,工作变动的职员也可以按照工作年限.行业属