[BZOJ1007][HNOI2008]水平可见直线 计算几何
题目链接: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]水平可见直线 计算几何相关推荐
- BZOJ1007:[HNOI2008]水平可见直线(计算几何)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y ...
- bzoj1007[HNOI2008]水平可见直线
bzoj1007[HNOI2008]水平可见直线 题意: 平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.给出n条直线 ...
- [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x ...
- bzoj 1007 : [HNOI2008]水平可见直线 计算几何
题目链接 给出n条直线, 问从y轴上方向下看, 能看到哪些直线, 输出这些直线的编号. 首先我们按斜率排序, 然后依次加入一个栈里面, 如果刚加入的直线, 和之前的那条直线斜率相等, 那么显然之前的会 ...
- [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线: ...
- HYSBZ/BZOJ 1007 [HNOI2008] 水平可见直线 - 计算几何
题目描述 分析: 直角坐标系内,有n条直线分布,求:最大值(对于任意x,直线上能取到的max( f(x) ))构成的折线由哪些直线构成. Solution : 把直线按照斜率从小到大排序. 从左到右: ...
- Bzoj1007 [HNOI2008]水平可见直线
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6903 Solved: 2643 Description 在xoy直角坐标平面上有n条直线L1,L2 ...
- bzoj 1007: [HNOI2008]水平可见直线
1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7378 Solved: 2829 [Submit][S ...
- BZOJ.1007.[HNOI2008]水平可见直线(凸壳 单调栈)
题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l ...
- _bzoj1007 [HNOI2008]水平可见直线【单调栈】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1007 按斜率排序,去掉斜率相同时,截距较小的直线(即只保留该斜率下截距最大的直线).若当前直 ...
最新文章
- android ui布局开发,Android UI设计初步(基本布局)
- Blend_ControlTemplate(Z)
- 使3D空间中物体朝向和其速度方向一致的旋转矩阵计算方案
- Redis源码剖析(八)链表
- 剑指OFFER之二进制中1的个数(九度OJ1513)
- app服务器不运行了,springmvc app URL在本地运行,但不在服务器上运行
- leetcode 594 最长和谐子序列
- idea 2019.2 svn 忽略文件/目录 .idea *.iml target log
- 数学建模之线性规划问题与LINGO软件的使用
- 广告投放系统后台html,今日头条广告如何投放?今日头条广告后台操作说明
- EPUB文档格式简单总结
- yxy小蒟蒻的201111总结
- javascript(js)语法 将blob转arrayBuffer、arrayBuffer转Uint8Array、Uint8Array转String的方法
- [Eureka集群] 在linux上部署SpringCloudEureka的集群服务端(Dalston.SR5版本)
- Pr调色预设怎么安装?.cube格式luts预设如何导入pr?Premiere导入LUTs预设详细教程
- 内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类
- Content Distribution Networks(CDNs)
- AD/DA相关基础知识
- 索引图像,RGB图像,灰度图像,.二值图像
- android自定义手势,Android实现自定义手势和识别手势的功能