发现需要求一个下凸的半平面上有几个交点。

然后我们把它变成凸包的问题。

好写、好调、还没有精度误差。

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long longstruct Vector{int x,y;void print(){printf("Vector - > (%d,%d)\n",x,y);}
};struct Point{int x,y;int id;void print(){printf("Point ID %d (%d,%d)\n",id,x,y);}
};Vector operator - (Point a,Point b)
{Vector ret;ret.x=a.x-b.x;ret.y=a.y-b.y;return ret;}ll operator * (Vector a,Vector b)
{return (ll)a.x*b.y-(ll)a.y*b.x;}int n,top=0;
Point a[50005],sta[50005];bool cmp(Point a,Point b)
{return a.x==b.x?a.y<b.y:a.x<b.x;}
bool cmp2(Point a,Point b)
{return a.id<b.id;}
void Andrew()
{F(i,1,n)if (a[i].x!=a[i-1].x){while (top>=2&&(sta[top]-sta[top-1])*(a[i]-sta[top])<=0) top--;sta[++top]=a[i];}sort(sta+1,sta+top+1,cmp2);F(i,1,top) printf("%d ",sta[i].id);printf("\n");
}void Finout()
{freopen("bzoj_1007.in","r",stdin);freopen("bzoj_1007.out","w",stdout);
}int main()
{
//  Finout(); scanf("%d",&n);F(i,1,n){scanf("%d%d",&a[i].x,&a[i].y);a[i].y=-a[i].y;a[i].id=i;}sort(a+1,a+n+1,cmp);Andrew();
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6706277.html

BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. [HNOI2008]水平可见直线 半平面交

    求向直线们的俯视视角中可见的直线,以为是选最大最小斜率然后往中间放..其实就是半平面交 //#include<bits/stdc++.h> //#pragma comment(linker ...

  8. [BZOJ 1038][ZJOI 2008]瞭望塔(半平面交)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1038 思路 这个题在上海ACM/ICPC冬令营的比赛中也考过,不是很难,不过想要想到用半平 ...

  9. [POJ3384]Feng Shui(半平面交+凸包)

    题目: 我是超链接 题意: 在一个凸多边形中放两个半径固定的圆,要求输出使覆盖面积最大的(可重叠)两个圆圆心 题解: Emmm...套路缩小凸多边形,形成的凸包是圆心可以在的位置,然后暴力找最远点! ...

最新文章

  1. 解决启动hadoop时datanode无法启动
  2. 图像的膨胀与腐蚀、细化
  3. Win 10 UWP开发系列:设置AppBarButton的图标
  4. Python入门100题 | 第006题
  5. excel进度条与百分比不符_用Python操作Excel数据
  6. camel apache_短款Apache Camel K
  7. 进程控制常用的一些操作
  8. 尘埃落定,初心未改——一个大学生的电子大赛感悟
  9. 防止Visual C++应用程序缓冲区溢出
  10. 创建一个对象和i++是否原子性的理解
  11. linux 查看libevent 安装目录,关于Linux下libevent库的基础安装和使用
  12. 免费好用的DiffMerge工具大总结
  13. MyEclipse10 破解方法
  14. 信息系统项目管理师 - 项目沟通管理
  15. jQuery 效果 ——fadeIn() 方法、fadeOut() 方法
  16. BeyondCompare密钥过期怎么办?不用再找新的密钥,一招帮你搞定!
  17. 将ajax的值传给控制器,ASP.Net C#MCV - 将值从Ajax Jquery传递给Controller(示例代码)
  18. 变压器绕制工艺之分布电容
  19. 智能指针循环引用——你真的懂了吗?
  20. Java SpringBoot 表单提交Json提交 Star.hou

热门文章

  1. MPlayer配置文件
  2. /a.out , nohut ./a.out , nohup ./a.out 的区别
  3. 什么网了解c语言,什么是c语言?
  4. 04-02 接口协议分析工具
  5. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解
  6. 前端基础:JavaScript 代码风格指南
  7. 做前端的你有没有觉得很吃力?
  8. inventor 波纹阵列_Inventor技巧之草图驱动的阵列图文教程
  9. 计算机导论声明型摆设,《计算机导论作业-论文排档》.doc
  10. Qt_QDir_常见的操作