博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
阅读量:5890 次
发布时间:2019-06-19

本文共 1191 字,大约阅读时间需要 3 分钟。

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

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

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

#include #include 
#include
#include
#include
#include
#include
#include
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 long struct 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
=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

你可能感兴趣的文章
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
ABP理论学习之仓储
查看>>
我的友情链接
查看>>
CentOS图形界面和命令行切换
查看>>