思路和求凸包有点像

首先根据初始位置排序,然后同位置按斜率升序

然后加一条直线就暴力找就可以了(可以二分)

存每条直线的选取区间,然后由于有效的斜率单增,所以若覆盖了就是最后一个

要注意多条直线交于区间端点和 直线重合,由于后面的点一定被覆盖 ,直接加进前一条直线即可,然后这条直线加在最后面,作为最后一个区间的最高直线

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
long double X;
double lin;
int i,j,n,top,sta[10004],cnt,ans[10005];
struct la
{long double k,y,bj;
int id;
}a[10005];
vector<int>v[10004];
bool cmp(la a,la b)
{if(a.y==b.y)return a.k<b.k;return a.y>b.y;
}
int main()
{   scanf("%d",&n);for(i=1;i<=n;i++)scanf("%lf",&lin),a[i].y=lin,a[i].id=i;for(i=1;i<=n;i++)scanf("%lf",&lin),a[i].k=lin;sort(a+1,a+1+n,cmp);sta[++top]=1;a[1].bj=1999999999999999999;for(i=2;i<=n;i++){for(j=1;j<=top;j++){if(a[i].k==a[sta[j]].k)break;//   cout<<a[sta[j]].y-a[i].y<<" "<<a[i].k-a[sta[j]].k<<endl;   X=(a[sta[j]].y-a[i].y)/(a[i].k-a[sta[j]].k);// cout<<" "<<a[sta[j]].y-a[i].y<<":"<<a[i].k-a[sta[j]].k<<"=="<<X<<endl;if(X<0)break;if(X+0.000000000001>a[sta[j]].bj&&X-0.000000000001<a[sta[j]].bj)//右边界重合 {v[sta[j]].push_back(a[sta[j+1]].id);//原来右边界的线,和这条线一样 top=j+1;sta[top]=i;    a[i].bj=1999999999999999999;       break;}elseif(X<a[sta[j]].bj)//提前重合,右边的点无意义 {top=j+1;sta[top]=i;a[sta[j]].bj=X;a[i].bj=1999999999999999999;break;        }   }       }for(i=1;i<=top;i++){int o=sta[i];ans[++cnt]=a[o].id;for(j=0;j<v[o].size();j++)ans[++cnt]=v[o][j];}sort(ans+1,ans+1+cnt);printf("%d\n",cnt);for(i=1;i<cnt;i++)printf("%d ",ans[i]);printf("%d",ans[cnt]);
}

bzoj3190 [JLOI2013]赛车 半平面交相关推荐

  1. bzoj 3190 赛车 半平面交

    直接写的裸的半平面交,已经有点背不过模板了... 这题卡精度,要用long double ,esp设1e-20... #include<iostream> #include<cstd ...

  2. 【kuangbin专题】计算几何_半平面交

    1.poj3335 Rotating Scoreboard 传送:http://poj.org/problem?id=3335 题意:就是有个球场,球场的形状是个凸多边形,然后观众是坐在多边形的边上的 ...

  3. poj3335 半平面交

    题意:给出一多边形.判断多边形是否存在一点,使得多边形边界上的所有点都能看见该点. sol:在纸上随手画画就可以找出规律:按逆时针顺序连接所有点.然后找出这些line的半平面交. 题中给出的点已经按顺 ...

  4. BZOJ 1038: [ZJOI2008]瞭望塔 半平面交

    Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们 将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1 ...

  5. 计算几何学习之半平面交

    首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面. 然后,半平面怎么表示呢? 二维坐标系下,直线可以表示为ax ...

  6. [BZOJ2033][清橙A1215][2009国家集训队]大灾变-半平面交

    大灾变 Description 艾泽拉斯世界经历一场亘古未有的地震过后,大地和海洋被完全撕裂,旧大陆残缺不全.联盟和部落各种族的居民们被迫离开了世代居住的家园,来寻找新的生存空间.原本平坦的陆地上现在 ...

  7. 【POJ1474】监控摄像头 半平面交

    题目描述 一个著名的仓库管理公司SERKOI 请你为其安装一套闭路监视系统,由于SERKOI 财力有限,每个房间只能安装一台摄像机,不过其镜头可以向任何方向转换. 请你写一个程序,对于给定的房间示意图 ...

  8. bzoj3190: [JLOI2013]赛车

    题目 http://www.lydsy.com/JudgeOnline/problem.php?id=3190 题解 上午一节课写出来,在CodeVS上交了,90分 然而一直到刚才,我都在调试.... ...

  9. [BZOJ1038]ZJOI2008瞭望塔|半平面交

    考虑某个村庄可以被看见的区域,发现一条线段的上方就是可以看见端点的区域,那就把所有线段扔进去做半平面交,不要忘记了要加上两条左右边界..求出来之后发现答案要么是某个村庄往上到半平面交的一段距离,要么是 ...

最新文章

  1. 手机自带的显示基站命令
  2. 将xscj指定为当前数据库_(2)连接登陆数据库
  3. 大话中文文本分类之前数据处理
  4. notes系统服务器地址,notes怎么连接服务器地址
  5. Java 8:长期支持的堡垒
  6. 微信小程序request请求封装;微信小程序封装request请求;uni-app小程序封装request请求;
  7. c语言乘法口诀表的流程图_例18:C语言编程实现九九乘法表
  8. SpringBoot项目的 pom.xml第一行报错
  9. 纠前误码率与信噪比 matlab,信噪比与误码率关系.pdf
  10. python oracle orm_Python - ORM(数据库相关)
  11. Facebook广告费用如何出价?
  12. centos6下安装php7的memcached扩展
  13. k8s的Pod状态和生命周期管理
  14. springboot 返回输出流_Spring Boot 静态资源处理,妙招
  15. javaweb项目图
  16. 揭密征途赚钱模式:史玉柱在赚谁的钱
  17. linux 本地查看服务器图片-2种方式
  18. Excel中的快捷实用操作
  19. freeswitch系列31注册流程
  20. Flash服务端常见架构方案

热门文章

  1. 第一、二类斯特林(Stirling)数的生成函数(母函数)及推导
  2. 使用Python为《围城》做一个图云
  3. 如何快速通过全国计算机等级考试【二级三级】(干货文章)
  4. CygWin遇到WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法
  5. 例子---PHP与Form表单之一
  6. 4_less中带参数混合
  7. android 分享小程序,Android分享微信小程序给微信好友,封面bitmap的处理
  8. h2 不能访问localhost,SpringBoot访问H2控制台
  9. idbconnection mysql_基于IDbConnection接口实现修改配置文件切换数据源
  10. js 二叉树图形_在线生成二叉树(基于EaselJS(canvas))