HDU5033 building 单调栈+计算几何
正解:单调栈
解题报告:
哇生气辽QAQ本来打了半天feel good都快调出来了然后说换题了QAQ(所以可能那题的代码会过一阵子再放上来了QAQ
不过还是大爆手速打了一通拿到首杀了嘻嘻
美滋滋辽
然后放个传送门先qwq
有一点点解题思想和oil是有点儿像的,就是先把询问和修改放一个结构体里排序,这样当到达某个询问的时候就可以直接解决不用进行其他修改了qwq
然后就是做两次单调栈一次算出往左能看到的角度一次算出往右能看到的角度
然后就欧克辽?
ummm好像是没什么好说的了只要推出了角度计算公式然后按斜率维护栈,然后就差不多了?
顺便是不是可以总结下?就是这种计算几何询问+修改的经常会有放在一个数据结构里然后排序的操作?这样通常都会方便一些呢qwq
over?
代码放下我就做后面的题目辣qwq
啊还有就是这题我不是港说计算几何嘛?其实并没有用到计算几何的方法的说感觉,只是在这个范畴内所以就随手cue了一下qwq
#include <bits/stdc++.h>
using namespace std;
#define rp(i,x,y) for(register int i=x;i<=y;++i)
const double PI=acos(-1.0) ;
+,inf=;
struct node
{
int x,h;
bool operator<(const node &R)const{return x<R.x;}
}bd[N<<],stk[N<<];
double ans[N];
int n,q;
inline int read()
{
;;
'))ch=getchar();
;
)+(x<<)+(ch^'),ch=getchar();
return y?x:-x;
}
inline bool judge(node a,node b,node c)
{
)c.h=;
return (long long)(a.h-c.h)*(b.x-c.x)<=(long long)(b.h-c.h)*(a.x-c.x);
}
inline double xl(node a,node b){return atan(1.0*(b.x-a.x)/a.h);}
inline void solve()
{
;
rp(i,,n+q)
{
)
{
&& judge(stk[top-],stk[top-],bd[i]))--top;
ans[-bd[i].h]+=xl(stk[top-],bd[i]);
continue;
}
].h<=bd[i].h) || (top>= && judge(stk[top-],stk[top-],bd[i])))--top;
stk[top++]=bd[i];
}
}
int main()
{
int T=read();
rp(j,,T)
{
n=read();rp(i,,n)bd[i].x=read(),bd[i].h=read();
q=read();rp(i,,q)bd[i+n].x=read(),bd[i+n].h=-i;
memset(ans,,,bd+n+q+);solve();
reverse(bd+,bd+n+q+);rp(i,,n+q)bd[i].x=inf-bd[i].x;solve() ;
printf(,q)printf(/PI) ;
}
;
}
//话说插入代码中编程语言c#和c++看起来有什么区别嘛qwq我有时候选c#有时候选c++感觉界面都一样鸭qwq
这儿!是!代码!QwQ
HDU5033 building 单调栈+计算几何的更多相关文章
- HDU5033 Building(单调栈)
题意是说在水平轴上有很多建筑物(没有宽度),知道每个建筑物的位置与高度.有m个查询,每次查询位置x所能看到的天空的角度. 方法是将建筑与查询一起排序,从左往右计算一遍,如果是建筑物,则比较最后两个(当 ...
- HDU 5033 Building(单调栈)
HDU 5033 Building(单调栈) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5033 Description Once upon a ti ...
- hdu5033 Building 单调队列
// hdu5033 Building 单调队列 // // 题目大意: // // n栋大楼,有一个高度h和位置x.如今有一个人高度为0,有q个询问 // 每一个询问有一个位置x,求在位置x能看到天 ...
- hdu 5033 Building (单调栈 或 暴力枚举 )
Description Once upon a time Matt went to a small town. The town was so small and narrow that he can ...
- HDU - 5033 Building (单调栈+倍增)
题意:有一排建筑,每座建筑有一定的高度,宽度可以忽略,求在某点的平地上能看到天空的最大角度. 网上的做法基本都是离线的...其实这道题是可以在线做的. 对于向右能看到的最大角度,从右往左倍增维护每个时 ...
- HDU 5033 Building(单调栈维护凸包)
盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度, ...
- hdu5033 Building (单调栈+)
http://acm.hdu.edu.cn/showproblem.php?pid=5033 2014 ACM/ICPC Asia Regional Beijing Online B 1002 Bui ...
- HDU 5033 Building(北京网络赛B题) 单调栈 找规律
做了三天,,,终于a了... 11724203 2014-09-25 09:37:44 Accepted 5033 781MS 7400K 4751 B G++ czy Building Time L ...
- HDU 5033 Building (维护单调栈)
题目链接 题意:n个建筑物,Q条询问,问所在的位置,看到天空的角度是多少,每条询问的位置左右必定是有建筑物的. 思路 : 维护一个单调栈,将所有的建筑物和所有的人都放到一起开始算就行,每加入一个人,就 ...
随机推荐
- vue的首页渲染了两次的原因以及解决方法
现在在用vue做一些单页面应用的东西,遇到了些许问题啊,比如我再渲染首页的时候,会渲染两次,查看了一下原因,原来是在写路由的时候写的格式错了: 这样的时候,初始的时候就是加载的exam_list页面, ...
- URI跳转方式地图导航的代码实践
本文转载至 http://adad184.com/2015/08/11/practice-in-mapview-navigation-with-URI/ 前言 之前介绍了我正在做的是一款定位主打的应用 ...
- cygwin设置NDK环境变量ANDROID_NDK_ROOT
cygwin安装目录下的“home/当前用户名”的.bash_profile下以UltraEdit(Unix方式)或者eclipse打开,最后添加一句: ANDROID_NDK_ROOT=/cygdr ...
- liunx trac 邮件提示功能
http://trac.edgewall.org/wiki/TracNotification官网上提供的方法.个人觉得不是清楚,不过还是有参考价值的.以下写下自己的添加过程,以作记录. 1.the [ ...
- 【大数据系列】HDFS安全模式
一.什么是安全模式 安全模式时HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除.修改等变更请求.在NameNode主节点启动时,HDFS首先进入安全模式,DataNod ...
- String.Split()函数 多种使用实例
我们在上次学习到了 String.Join函数(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx),其中用到了String.SPl ...
- 让人一看就懂的excel相对引用和绝对引用案例解析
http://www.ittribalwo.com/article/2831.html 内容提要:本文的excel相对引用和绝对引用.混合引用的使用方法案例截选自<Excel效率手册 早做完,不 ...
- sencha touch list + carousel scrollable(与其他控件共用滚动条)
有些时候我们需要实现这种效果 上边是一张图片或者一个跑马灯控件,这个布局实现起来比较容易 但是如何让他们共用一个滚动条,来实现以下效果就比较麻烦了. 在官方论坛查找资料得知,可以用以下写法实现: /* ...
- demo:使用数字证书进行数字签名和加密,解密
下边是一个使用数字证书来进行数字签名(以及验证签名信息),以及非对称加密的一个demo,代码中使用PKCS12类型的keystore(包含私钥)使用JKS或者其他类型的keystore也是可以的,就是 ...
- Egret容器的鼠标默认事件
容器的鼠标默认事件 touchEnabled touchChildren touchThrough DisplayObject false \ \ DisplayObjectContainer f ...