传送门: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]水平可见直线【单调栈】相关推荐

  1. bzoj 1007: [HNOI2008]水平可见直线

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7378  Solved: 2829 [Submit][S ...

  2. bzoj1007[HNOI2008]水平可见直线

    bzoj1007[HNOI2008]水平可见直线 题意: 平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.给出n条直线 ...

  3. BZOJ.1007.[HNOI2008]水平可见直线(凸壳 单调栈)

    题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l ...

  4. 【洛谷 P3194】 [HNOI2008]水平可见直线 (单调栈)

    题目链接 把线段以斜率为第一关键字,截距为第二关键字升序排序. 然后维护一个单调栈,保证栈中两两线段的交点的\(x\)坐标单调上升就行了.栈中的线段即为所求. #include <cstdio& ...

  5. Bzoj1007 [HNOI2008]水平可见直线

    Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 6903  Solved: 2643 Description 在xoy直角坐标平面上有n条直线L1,L2 ...

  6. bzoj 1007 : [HNOI2008]水平可见直线 计算几何

    题目链接 给出n条直线, 问从y轴上方向下看, 能看到哪些直线, 输出这些直线的编号. 首先我们按斜率排序, 然后依次加入一个栈里面, 如果刚加入的直线, 和之前的那条直线斜率相等, 那么显然之前的会 ...

  7. [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.     例如,对于直线:   ...

  8. BZOJ1007:[HNOI2008]水平可见直线(计算几何)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y ...

  9. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x ...

最新文章

  1. 我们离通用智能机器人大脑还有多远?看看这家科技公司给出的答案
  2. 《公司理财》_16章_2.财务杠杆学习笔记
  3. Spring事务传播机制和隔离级别
  4. deepin v20.1折腾美化之Plank dock任务栏安装
  5. iptables中关于limit和limit-burst的解释
  6. 现代软件工程 作业汇总
  7. linux文件的查看指令-cat-more-less
  8. 广义线性模型——逻辑回归(logistic regression)
  9. Spring 声明式事务应该怎么学?
  10. Parcelable protocol requires a Parcelable.Creator object called。。。。。
  11. 软件测试自学指南---从入门到精通
  12. 用于预测的神经网络模型,神经网络模型可解释性
  13. 计算机的发展是小报,电脑小报作品展示评价与交流.ppt
  14. LabVIEW树形控件
  15. 虚幻引擎_矢量场初探
  16. VS1005 HiRes 高清录音开发模块 BOB MK2
  17. 工具:通过Python fitz 提取PDF内的图片
  18. springboot POST 405 错误
  19. boost库做什么用呢?
  20. fect:基于面板数据的因果推断(上)

热门文章

  1. 深度学习《CNN架构续篇 - BatchNorm》
  2. Robust Point Cloud Registration Framework Based on Deep Graph Matching (RGM) 简略分析
  3. 【数学基础】无偏估计——为何样本方差需要除以(n-1)?
  4. 循环序列模型 —— 1.6 语言模型和序列生成
  5. leetcode - 62. 不同路径
  6. Stanford CoreNLP遇到的问题
  7. C++/C--字符串分割函数 --strtok()
  8. Unity MVC框架 StrangeIoC
  9. MyBatis框架 mybatis.xml与Mapper.xml基本架构
  10. 《汇编语言》王爽—第六章实验四详解