1007: [HNOI2008]水平可见直线[维护下凸壳]
2024-10-20 08:52:04
1007: [HNOI2008]水平可见直线
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 7184 Solved: 2741
[Submit][Status][Discuss]
Description
在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为
可见的,否则Li为被覆盖的.
例如,对于直线:
L1:y=x; L2:y=-x; L3:y=0
则L1和L2是可见的,L3是被覆盖的.
给出n条直线,表示成y=Ax+B的形式(|A|,|B|<=500000),且n条直线两两不重合.求出所有可见的直线.
Input
第一行为N(0 < N < 50000),接下来的N行输入Ai,Bi
Output
从小到大输出可见直线的编号,两两中间用空格隔开,最后一个数字后面也必须有个空格
Sample Input
3
-1 0
1 0
0 0
-1 0
1 0
0 0
Sample Output
1 2
HINT
Source
#include<cstdio>
#include<algorithm>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int N=5e5+;
struct node{int a,b,id;}c[N];
int n,cnt,pos[N];double slop[N];bool vis[N];
bool operator <(const node &x,const node &y){
return x.a<y.a;
}
int main(){
n=read();
for(int i=;i<=n;i++) c[i].a=read(),c[i].b=read(),c[i].id=i;
sort(c+,c+n+);
int now=;
for(int i=;i<=n;i++){
for(;c[i].a==c[now].a;i++){
if(c[i].b>c[now].b){
c[now]=c[i];
}
}
if(i<=n) c[++now]=c[i];
}
pos[cnt=]=;slop[]=-0x7fffffffffffffffLL;
for(int i=;i<=now;i++){
double low;
for(;;){//相对斜率关系(避免求交点)
low=(double)(c[pos[cnt]].b-c[i].b)/(double)(c[i].a-c[pos[cnt]].a);
if(low<=slop[cnt])
cnt--;
else
break;
}
pos[++cnt]=i;
slop[cnt]=low;
}
for(int i=;i<=cnt;i++) vis[c[pos[i]].id]=;
for(int i=;i<=n;i++) if(vis[i]) printf("%d ",i);
return ;
}
最新文章
- git学习之冲突解决办法
- 【解决】SharePoint 2013 with SP1安装问题及解决
- Java设计模式-责任链模式(Chain of Responsibility)
- (三)、Express 路由、静态文件、
- Codeforces #250 (Div. 2) C.The Child and Toy
- C#.NET实现Word或Excel文件转为HTML文件
- jQuery学习-----(二)JQuery对象与DOM对象的区别与转换
- Servlet问题:servlet cannot be resolved to a type解决办法
- BZOJ 1217: [HNOI2003]消防局的设立( 贪心 )
- Java多线程:线程同步与关键字synchronized
- 关于echarts使用的各种问题
- eclipse安装cucumber插件
- Struts2新漏洞S2-046在线实验环境全球首发
- Java面试集合(四)
- 【原】PHP从入门到精通2小时【图文并茂】
- ASP的不足与ASP.NET和ASP的区别
- MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded
- 计算机网络【8】—— Get和Post请求的区别
- 解决Fragment每次进入都加载的问题
- 原生android(二)——认识activity
热门文章
- &#39;AndroidManifest.xml&#39; must have a minimum of 2 segments.
- 【玩转Golang】 通过组合嵌入实现代码复用
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
- 内存管理 初始化(四)mem_init bootmem 迁移至伙伴系统
- Bootstrap 轮播(Carousel)详解
- linux如何通过脚本来修改用户的密码?脚本自动化修改用户密码?
- VB2008新特性
- SpringMVC由浅入深day02_1课程安排_2包装类型pojo参数绑定_3集合类型绑定
- MvvmLight学习篇—— Mvvm Light Toolkit for wpf/silverlight系列(导航)
- 关于C中函数传参的一点理解