博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVAL 4728 Squares(旋转卡壳)
阅读量:5284 次
发布时间:2019-06-14

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

Squares

【题目链接】

【题目类型】旋转卡壳

&题解:

听着算法名字,感觉挺难,仔细一看之后,发现其实很简单,就是依靠所构成三角行面积来快速的找对踵点,就可以省去很多的复杂度了.旋转的复杂度是O(n),之后还有计算每条边对应的对踵点复杂度平均大约O(n/2)在实际中也许可以更快

&代码:

#include 
#include
#include
#include
#include
using namespace std;struct Point { int x,y; Point(int x=0,int y=0): x(x),y(y) {}};typedef Point Vector;Vector operator - (const Vector& A,const Vector& B) {return Vector(A.x-B.x , A.y-B.y);}bool operator == (const Point& a,const Point& b) {return a.x==b.x&&a.y==b.y;}bool operator < (const Point& a,const Point& b) {return a.x
ConvexHull(vector
p) { sort(p.begin(),p.end()); p.erase(unique(p.begin(),p.end()) , p.end()); int n=p.size(), m=0; vector
ch(n+1); for(int i=0; i
1&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-1])<=0) m--; ch[m++]=p[i]; } int k=m; for(int i=n-2; i>=0; i--) { while(m>k&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-1])<=0) m--; ch[m++]=p[i]; } if(m>1) m--; ch.resize(m); return ch;}int diameter2(vector
& points) { vector
p=ConvexHull(points); int n=p.size(); if(n==1) return 0; if(n==2) return Dist2(p[0] , p[1]); p.push_back(p[0]); int ans=0; for(int u=0, v=1; u
po; for(int i=0; i

转载于:https://www.cnblogs.com/s1124yy/p/6783304.html

你可能感兴趣的文章
TortoiseSVN客户端更改新的URL和账号
查看>>
Reveal使用步骤
查看>>
WPF Binding 的顺序问题
查看>>
Redis高级特性:虚拟内存的使用技巧
查看>>
BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】
查看>>
loj2542 「PKUWC2018」随机游走 【树形dp + 状压dp + 数学】
查看>>
重温WCF之数据契约中使用枚举(转载)(十一)
查看>>
iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用...
查看>>
iOS使用宏写单例
查看>>
Swift - 区间运算符(... 和 ..<)
查看>>
Android 滑动效果高级篇(八)—— 自定义控件
查看>>
数组实现[置顶] PHP内核中的神器之HashTable
查看>>
SQL Server output子句用法 output inserted.id 获取刚插入数据的id
查看>>
《老妈语录》 读后感
查看>>
帝国cms中当调用当前信息不足时,继续取其他数据
查看>>
c#将文件复制到某个文件夹内winform文件复制
查看>>
ibatis 实现多个字段查询条件
查看>>
CF Round 432 B. Arpa and an exam about geometry
查看>>
stm32 IAP
查看>>
redhat 6.3 ssh免密码登录
查看>>