读音

word上是这么读的:

前置技能

凸包

算法用途

旋转卡壳可以在O(n)O(n)O(n)的时间内确定一对对踵点对,它的用途包括但不限于:计算距离(凸多边形直径)、计算外接矩形(最小面积/周长)、三角剖分(洋葱三角剖分)等其他奇奇怪怪的东西。

算法实现(模板)

以POJ2187(洛谷P1452)为例。

这道题要我们求所有点之间的最大距离。我们先求出这些点的凸包,最大距离肯定在凸包的对踵点对上。那么我们枚举所有的对踵点对就好了,而旋转卡壳就是实现这个的。

对于每个点,我们枚举它的对踵点对。假设当前点的为iii,上一个点的对踵点对为x" role="presentation">xxx,那么当(x+1→−x⃗ )×(i⃗ −x⃗ )≥(x+1→−x⃗ )×(i+1→−x⃗ )(x+1→−x→)×(i→−x→)≥(x+1→−x→)×(i+1→−x→)(\vec{x+1}-\vec x)\times(\vec i-\vec x)\geq(\vec{x+1}-\vec x)\times(\vec{i+1}-\vec x)时,说明xxx仍不是i" role="presentation">iii的对踵点对(因为i+1i+1i+1比iii更符合)。那么把x+1" role="presentation">x+1x+1x+1并继续验证。当找到对踵点对时更新答案就好了。

代码实现(旋转卡壳为RC()):

#include<cmath>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 50005
#define F friend
#define eps 1e-7
#define sqr(x) ((x)*(x))
#define abs(x) ((x)>0?(x):-(x))
using namespace std;
struct P{int x,y;F bool operator < (P a,P b){return abs(a.y-b.y)<eps?a.x<b.x:a.y<b.y;}F int cs(P a,P b,P c){//叉积return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}F int dis(P a,P b){return sqr(a.x-b.x)+sqr(a.y-b.y);}
}t[N],s[N];
int n,tp,ans;
inline char readc(){static char buf[100000],*l=buf,*r=buf;if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);if (l==r) return EOF; return *l++;
}
inline int _read(){int x=0,f=1; char ch=readc();while (!isdigit(ch)) { if (ch=='-') f=-1; ch=readc(); }while (isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=readc();return x*f;
}
inline bool cmp(P a,P b){int f=cs(t[1],a,b); if (f) return f>0;return dis(t[1],a)-dis(t[1],b)<eps*eps;
}
inline void GR(){//凸包sort(t+1,t+n+1),s[++tp]=t[1],sort(t+2,t+n+1,cmp);for (int i=2;i<=n;s[++tp]=t[i++])while (tp>1&&cs(s[tp-1],s[tp],t[i])<eps) tp--;
}
inline void RC(){//旋转卡壳s[0]=s[tp]; int x=1;for (int i=0;i<tp;ans=max(ans,dis(s[i++],s[x])))while (cs(s[x],s[x+1],s[i])-cs(s[x],s[x+1],s[i+1])>eps)x=(x+1)%tp;
}
int main(){n=_read();for (int i=1;i<=n;i++)t[i].x=_read(),t[i].y=_read();return GR(),RC(),printf("%d\n",ans),0;
}

旋转卡壳简介(POJ2187)(洛谷P1452)相关推荐

  1. 算法复习——凸包加旋转卡壳(poj2187)

    题目: Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest ...

  2. POj2187 【模板】旋转卡壳 / 选美大赛

    POj2187 [模板]旋转卡壳 / 选美大赛 题目描述 农夫约翰奖的牛贝西(Bessie)刚刚在牛选美比赛中获得第一名,并获得了"牛世界小姐"的头衔.结果,贝茜将参观世界各地的N ...

  3. [POJ2187]Beauty Contest(计算几何-旋转卡壳-最远点对)

    题目: 我是超链接 题解: 值得一提的是,这是一个"不定向"算法,为什么呢,因为ta的名字不定哈哈哈,旋转卡壳一共有2*3*2*2=24种不同的读音哦 旋转卡壳可以解决:凸多边形最 ...

  4. 洛谷日报 2020年3月前索引

    2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https://www.luo ...

  5. 洛谷日报索引(2020、2019、2018)

    历年洛谷日报索引 2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https: ...

  6. [转载]洛谷日报索引

    2019年 6月 #183[朝田诗乃]你以为莫队只能离线?莫队的在线化改造 https://shoko.blog.luogu.org/moqueue #182[Heartlessly ]常用距离算法详 ...

  7. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

  8. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  9. 【动态规划】洛谷 P1282 多米诺骨牌

    [动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...

最新文章

  1. 基于区域的CNN(R-CNN)
  2. POJ 2430 状压DP
  3. aspen软件对电脑的要求_BIM软件对电脑配置的要求——Fuzor软件对电脑配置的要求...
  4. 网站基于文本搜索的实现
  5. 执行srvctl报错 :error while loading shared libraries: libpthread.so.0:
  6. python中的bs4怎么导入_在Python 3.5导入BS4
  7. 计算机网络之数据链路层:10、CSMA协议-随机访问介质访问控制
  8. 脚本格式(写脚本完成后最好完成后做一些脚本格式初始化)
  9. 20200715:动态规划复习day06
  10. linux 函数自动补全,Shell脚本中实现自动补全功能
  11. python md5加密字符串_python md5加密字符串的例子
  12. ICLR2019 | 模型训练会发生了大量的、反复的样本遗忘现象,如何解决?
  13. 进入心理死角--程序员不是技术,是心理 +我是菜鸟。
  14. 购物中心节假日如何统计客流量分析客流量数据?
  15. 使用pdfobject.js实现在线浏览PDF--后台上传保存文件
  16. 隐马尔可夫模型(HMM)详解
  17. 阿里巴巴29个屌炸天的开源项目,你用过几个?
  18. Java程序实现繁体字转换简体字
  19. 拼多多改销量10+是怎么回事
  20. PS保留渐变进行换色

热门文章

  1. 薅羊毛拼团商城2.5.3小程序源码
  2. 利用python将excle表格由xls转换为xlsx格式
  3. 推荐系统系列——推荐系统简介
  4. 固件类型bios和uefi_BIOS和固件之间有什么区别?
  5. 正睿OI DAY12 ks5
  6. LeetCode第9题 回文数(Palindrome Number)
  7. AntV G6将节点修改成图片
  8. 【二分】C. Keshi Is Throwing a Party
  9. 【微信支付】十分钟解决内网穿透,实现微信支付本地测试
  10. 计算机论文的致谢部分写什么,计算机论文致谢怎么写(格式+范例)