题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1007

可以发现题目求的就是一个下凸包,把直线按斜率排序,再来维护凸包就好了。可以发现下凸包上的拐点横坐标单增。同时注意处理斜率相同的直线的情况。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const double eps=1e-14;
 6 int inline sign(double x){
 7     return x<-eps?-1:(x>eps?1:0);
 8 }
 9 struct LINE{
10     double A,B;
11     int num;
12     bool operator < (const LINE &_)const{
13         if(sign(A-_.A)) return sign(A-_.A)<0;
14         return sign(B-_.B)>0;
15     }
16 }l[500010];
17 int n;
18 int sta[500010],top=0;
19 double inline Px(int a,int b){
20     return (l[a].B-l[b].B)/(l[b].A-l[a].A);
21 }
22 bool c[500010];
23 int main(){
24     scanf("%d",&n);
25     for(int i=1;i<=n;i++){
26         scanf("%lf%lf",&l[i].A,&l[i].B);
27         l[i].num=i;
28     }
29     sort(l+1,l+1+n);
30     sta[++top]=1;
31     for(int i=2;i<=n;i++){
32         if(!sign(l[i].A-l[sta[top]].A)) continue;
33         while(top>1&&sign(Px(i,sta[top-1])-Px(sta[top],sta[top-1]))<=0) top--;
34         sta[++top]=i;
35     }
36     for(int i=1;i<=top;i++) c[l[sta[i]].num]=true;
37     for(int i=1;i<=n;i++)
38         if(c[i])
39             printf("%d ",i);
40     return 0;
41 }

转载于:https://www.cnblogs.com/halfrot/p/7553483.html

[BZOJ1007][HNOI2008]水平可见直线 计算几何相关推荐

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

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

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

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

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

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

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

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

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

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

  6. HYSBZ/BZOJ 1007 [HNOI2008] 水平可见直线 - 计算几何

    题目描述 分析: 直角坐标系内,有n条直线分布,求:最大值(对于任意x,直线上能取到的max( f(x) ))构成的折线由哪些直线构成. Solution : 把直线按照斜率从小到大排序. 从左到右: ...

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

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

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

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

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

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

  10. _bzoj1007 [HNOI2008]水平可见直线【单调栈】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1007 按斜率排序,去掉斜率相同时,截距较小的直线(即只保留该斜率下截距最大的直线).若当前直 ...

最新文章

  1. android ui布局开发,Android UI设计初步(基本布局)
  2. Blend_ControlTemplate(Z)
  3. 使3D空间中物体朝向和其速度方向一致的旋转矩阵计算方案
  4. Redis源码剖析(八)链表
  5. 剑指OFFER之二进制中1的个数(九度OJ1513)
  6. app服务器不运行了,springmvc app URL在本地运行,但不在服务器上运行
  7. leetcode 594 最长和谐子序列
  8. idea 2019.2 svn 忽略文件/目录 .idea *.iml target log
  9. 数学建模之线性规划问题与LINGO软件的使用
  10. 广告投放系统后台html,今日头条广告如何投放?今日头条广告后台操作说明
  11. EPUB文档格式简单总结
  12. yxy小蒟蒻的201111总结
  13. javascript(js)语法 将blob转arrayBuffer、arrayBuffer转Uint8Array、Uint8Array转String的方法
  14. [Eureka集群] 在linux上部署SpringCloudEureka的集群服务端(Dalston.SR5版本)
  15. Pr调色预设怎么安装?.cube格式luts预设如何导入pr?Premiere导入LUTs预设详细教程
  16. 内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类
  17. Content Distribution Networks(CDNs)
  18. AD/DA相关基础知识
  19. 索引图像,RGB图像,灰度图像,.二值图像
  20. android自定义手势,Android实现自定义手势和识别手势的功能

热门文章

  1. QuantLib 金融计算——QauntLib 入门
  2. 时间序列分析工具箱——sweep
  3. R语言绘制双坐标轴的方法初探
  4. 移动端mintUI mt-datetime-picker 组件使用详解
  5. Mysql外键的变种 三种关系
  6. linux下C获取系统时间的方法
  7. 最全的HTTP1.1状态码
  8. IoC、DI、AOP
  9. C# System.Timers.Timers的用法在工控设备上位中的用法
  10. 控制用户创建课程权限