_bzoj1007 [HNOI2008]水平可见直线【单调栈】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1007
按斜率排序,去掉斜率相同时,截距较小的直线(即只保留该斜率下截距最大的直线)。若当前直线与栈顶直线的交点的x坐标<=栈顶直线与栈顶第二条直线的交点的x左边,则pop,直到前者大于后者为止,因为若小于等于,那么栈顶这条直线一定被覆盖。
#include <cstdio>
#include <algorithm>const int maxn = 50005;int n, tem_n, top, ori_n;
char book[maxn];
struct line {long long k, b;int id;
} a[maxn], stk[maxn];
struct point {double x, y;
};bool cmp(const line & aa, const line & ss) {if (aa.k == ss.k) {return aa.b > ss.b;}return aa.k < ss.k;
}int main(void) {scanf("%d", &n);for (int i = 0; i < n; ++i) {scanf("%lld%lld", &a[i].k, &a[i].b);a[i].id = i;}std::sort(a, a + n, cmp);tem_n = 1;for (int i = 1; i < n; ++i) {if (a[i].k != a[i - 1].k) {a[tem_n++] = a[i];}}ori_n = n;n = tem_n;for (int i = 0; i < n; ++i) {while (top > 1 && (stk[top - 1].b - a[i].b) * (stk[top - 1].k - stk[top - 2].k) <= (stk[top - 2].b - stk[top - 1].b) * (a[i].k - stk[top - 1].k)) {--top;}stk[top++] = a[i];}for (int i = 0; i < top; ++i) {book[stk[i].id] = 1;}for (int i = 0; i < ori_n; ++i) {if (book[i]) {printf("%d ", i + 1);}}return 0;
}
转载于:https://www.cnblogs.com/ciao-sora/p/6180815.html
_bzoj1007 [HNOI2008]水平可见直线【单调栈】相关推荐
- bzoj 1007: [HNOI2008]水平可见直线
1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7378 Solved: 2829 [Submit][S ...
- bzoj1007[HNOI2008]水平可见直线
bzoj1007[HNOI2008]水平可见直线 题意: 平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.给出n条直线 ...
- BZOJ.1007.[HNOI2008]水平可见直线(凸壳 单调栈)
题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l ...
- 【洛谷 P3194】 [HNOI2008]水平可见直线 (单调栈)
题目链接 把线段以斜率为第一关键字,截距为第二关键字升序排序. 然后维护一个单调栈,保证栈中两两线段的交点的\(x\)坐标单调上升就行了.栈中的线段即为所求. #include <cstdio& ...
- Bzoj1007 [HNOI2008]水平可见直线
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6903 Solved: 2643 Description 在xoy直角坐标平面上有n条直线L1,L2 ...
- bzoj 1007 : [HNOI2008]水平可见直线 计算几何
题目链接 给出n条直线, 问从y轴上方向下看, 能看到哪些直线, 输出这些直线的编号. 首先我们按斜率排序, 然后依次加入一个栈里面, 如果刚加入的直线, 和之前的那条直线斜率相等, 那么显然之前的会 ...
- [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线: ...
- BZOJ1007:[HNOI2008]水平可见直线(计算几何)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y ...
- [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x ...
最新文章
- 我们离通用智能机器人大脑还有多远?看看这家科技公司给出的答案
- 《公司理财》_16章_2.财务杠杆学习笔记
- Spring事务传播机制和隔离级别
- deepin v20.1折腾美化之Plank dock任务栏安装
- iptables中关于limit和limit-burst的解释
- 现代软件工程 作业汇总
- linux文件的查看指令-cat-more-less
- 广义线性模型——逻辑回归(logistic regression)
- Spring 声明式事务应该怎么学?
- Parcelable protocol requires a Parcelable.Creator object called。。。。。
- 软件测试自学指南---从入门到精通
- 用于预测的神经网络模型,神经网络模型可解释性
- 计算机的发展是小报,电脑小报作品展示评价与交流.ppt
- LabVIEW树形控件
- 虚幻引擎_矢量场初探
- VS1005 HiRes 高清录音开发模块 BOB MK2
- 工具:通过Python fitz 提取PDF内的图片
- springboot POST 405 错误
- boost库做什么用呢?
- fect:基于面板数据的因果推断(上)
热门文章
- 深度学习《CNN架构续篇 - BatchNorm》
- Robust Point Cloud Registration Framework Based on Deep Graph Matching (RGM) 简略分析
- 【数学基础】无偏估计——为何样本方差需要除以(n-1)?
- 循环序列模型 —— 1.6 语言模型和序列生成
- leetcode - 62. 不同路径
- Stanford CoreNLP遇到的问题
- C++/C--字符串分割函数 --strtok()
- Unity MVC框架 StrangeIoC
- MyBatis框架 mybatis.xml与Mapper.xml基本架构
- 《汇编语言》王爽—第六章实验四详解