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

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 ;
}

最新文章

  1. git学习之冲突解决办法
  2. 【解决】SharePoint 2013 with SP1安装问题及解决
  3. Java设计模式-责任链模式(Chain of Responsibility)
  4. (三)、Express 路由、静态文件、
  5. Codeforces #250 (Div. 2) C.The Child and Toy
  6. C#.NET实现Word或Excel文件转为HTML文件
  7. jQuery学习-----(二)JQuery对象与DOM对象的区别与转换
  8. Servlet问题:servlet cannot be resolved to a type解决办法
  9. BZOJ 1217: [HNOI2003]消防局的设立( 贪心 )
  10. Java多线程:线程同步与关键字synchronized
  11. 关于echarts使用的各种问题
  12. eclipse安装cucumber插件
  13. Struts2新漏洞S2-046在线实验环境全球首发
  14. Java面试集合(四)
  15. 【原】PHP从入门到精通2小时【图文并茂】
  16. ASP的不足与ASP.NET和ASP的区别
  17. MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded
  18. 计算机网络【8】—— Get和Post请求的区别
  19. 解决Fragment每次进入都加载的问题
  20. 原生android(二)——认识activity

热门文章

  1. &#39;AndroidManifest.xml&#39; must have a minimum of 2 segments.
  2. 【玩转Golang】 通过组合嵌入实现代码复用
  3. UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
  4. 内存管理 初始化(四)mem_init bootmem 迁移至伙伴系统
  5. Bootstrap 轮播(Carousel)详解
  6. linux如何通过脚本来修改用户的密码?脚本自动化修改用户密码?
  7. VB2008新特性
  8. SpringMVC由浅入深day02_1课程安排_2包装类型pojo参数绑定_3集合类型绑定
  9. MvvmLight学习篇—— Mvvm Light Toolkit for wpf/silverlight系列(导航)
  10. 关于C中函数传参的一点理解