[bzoj1007][HNOI2008]水平可见直线(单调栈+几何)
来源:互联网 发布:java extends 源码 编辑:程序博客网 时间:2024/06/07 22:59
题目:
我是超链接
题解:
如何判断两条直线已经被另一条直线覆盖?
令y1=k1x+b1 , y2=k2x+b2 , y3=k3x+b3
则求y1与y3的交点横纵坐标为
k1x+b1=k3x+b3
x=(b3−b1)/(k1−k3)
y=k1(b3−b1)/(k1−k3)+b1
然后求y2在x处的函数值
y2=k2(b3−b1)/(k1−k3)+b2
若y2≤y
即(k1−k3)∗(b2−b1)≤(k1−k2)∗(b3−b1)
那么直线y2已经被y1和y3完全覆盖
这个直线我们可以运用单调栈维护,啊啊啊乘的时候要用longlong啊
再加上一些最优值的维护就进化为单调队列,再把k,b换掉就是斜率优化dp啦
代码:
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>#define LL long longusing namespace std;struct hh{int k,b,id;}l[50005];int stack[50005],ans[50005];int cmp(hh a,hh b){if (a.k==b.k) return a.b<b.b;else return a.k<b.k;}bool fg(int x1,int x2,int x3){return (LL)(l[x2].k-l[x1].k)*(l[x3].b-l[x1].b)<=(LL)(l[x1].k-l[x3].k)*(l[x1].b-l[x2].b);}// l1与l3把l2覆盖 int main(){ int n,i,top=0; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d%d",&l[i].k,&l[i].b),l[i].id=i; sort(l+1,l+n+1,cmp); for (i=1;i<=n;i++) { while ((top>1 && fg(i,stack[top],stack[top-1])) || (top && l[i].k==l[stack[top]].k)) top--; stack[++top]=i; } while (top) { ans[++ans[0]]=l[stack[top]].id; top--; } sort(ans+1,ans+1+ans[0]); for (i=1;i<=ans[0];i++) printf("%d ",ans[i]);}
阅读全文
1 0
- [BZOJ1007][HNOI2008]水平可见直线(单调栈+计算几何)
- [BZOJ1007][HNOI2008]水平可见直线(单调栈+计算几何)
- [bzoj1007][HNOI2008]水平可见直线(单调栈+几何)
- 【XSY2138】【BZOJ1007】【HNOI2008】水平可见直线 几何 单调栈
- 【bzoj1007】[HNOI2008]水平可见直线 单调栈
- 【单调栈】BZOJ1007 [HNOI2008]水平可见直线
- [bzoj1007][HNOI2008]水平可见直线 单调栈
- [BZOJ1007][HNOI2008]水平可见直线(单调栈)
- [bzoj1007]:[HNOI2008]水平可见直线(单调栈)
- [BZOJ1007][HNOI2008]水平可见直线(栈)
- BZOJ1007 [HNOI2008]水平可见直线 计算几何 单调栈维护上凸包
- 【几何】[HNOI2008][BZOJ1007]水平可见直线
- BZOJ1007(HNOI2008)[水平可见直线]--半平面交+单调栈
- [BZOJ1007]HNOI2008水平可见直线|计算几何|栈
- 【BZOJ1007】【HNOI2008】水平可见直线(计算几何 凸壳)
- BZOJ1007 [HNOI2008]水平可见直线 贪心+栈
- 【BZOJ1007】水平可见直线(HNOI2008)-栈+凸壳
- BZOJ1007 水平可见直线 (单调栈 直线判交)
- IBM --Java 实习生面试题
- 关于 GET和POST请求的区别
- 简单通俗解释内外网IP与端口映射
- 浅析js事件冒泡机制
- 十道海量数据处理面试题与十个方法大总结
- [bzoj1007][HNOI2008]水平可见直线(单调栈+几何)
- Qt sender()函数
- Lightswitch文件上传(WCF版)
- php不需要第三个中间变量来实现两个变量的交换
- Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
- Python3网络爬虫:初识Scrapy爬虫框架
- python之路字符串操作
- 《王者荣耀》等“爆款”游戏是如何诞生的?| 马晓轶青腾大学演讲
- 商业帝国如何依靠AI出奇制胜?听3000名商界领袖怎么说