思路:求凸包,然后旋转卡壳对最远点对求解,注意凸包退化的情况

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
const int maxn = 1e5 + 10;
using namespace std;struct P {int x, y;P() {}P(int x, int y) : x(x), y(y) {}P operator - (P p) {return P(x - p.x, y - p.y);}int det(P a) {return x * a.y - y * a.x;}int dist(P c) {int X = c.x - x;int Y = c.y - y;return (X * X + Y * Y);}void input() {scanf("%d %d", &x, &y);}
};P po[maxn], C[maxn];
int n, k;bool cmp_x(P a, P b) {if(a.x != b.x) return a.x < b.x;return a.y < b.y;
}
//凸包求解
void convex_hull() {k = 0;sort(po, po + n, cmp_x);for(int i = 0; i < n; i++) {while(k > 1 && (C[k - 1] - C[k - 2]).det(po[i] - C[k - 1]) <= 0) k--;C[k++] = po[i];}for(int i = n - 2, t = k; i >= 0; i--) {while(k > t && (C[k - 1] - C[k - 2]).det(po[i] - C[k - 1]) <= 0) k--;C[k++] = po[i];}k--;
}
//旋转卡壳 -- 对踵点对求解
int solve() {//凸包退化if(k == 2) return C[0].dist(C[1]);int i = 0, j = 0;for(int kk = 0; kk < k; kk++) {if(!cmp_x(C[i], C[kk])) i = kk;if(cmp_x(C[j], C[kk])) j = kk;}int res = 0;int si = i, sj = j;while(si != j || sj != i) {res = max(res, C[i].dist(C[j]));if((C[(i + 1) % k] - C[i]).det(C[(j + 1) % k] - C[j]) < 0) i = (i + 1) % k;else j = (j + 1) % k;}return res;
}int main() {while(scanf("%d", &n) != EOF) {for(int i = 0; i < n; i++)po[i].input();convex_hull();int res = solve();printf("%d\n", res);}return 0;
}

POJ2187 Beauty Contest(凸包+对踵点对求解)相关推荐

  1. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)

    1 /* poj 2187 Beauty Contest 2 凸包:寻找每两点之间距离的最大值 3 这个最大值一定是在凸包的边缘上的! 4 5 求凸包的算法: Andrew算法! 6 */ 7 #in ...

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

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

  3. poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)

    http://poj.org/problem?id=2187 题意: 最长的点对近距离的平方: 题解: 旋转卡壳法, 要注意的地方是,有 所有点共线的情况,所以,(求凸包时)要将,共线点去出 :    ...

  4. Beauty Contest(凸包 + 旋转卡壳(模板))

    Beauty Contest 直接跑一个凸包,然后跑一跑旋转卡壳,求最大值就行了. /*Author : lifehappy */ #include <cstdio> #include & ...

  5. POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))

    链接:https://vjudge.net/problem/POJ-2187 题意:求求距离最远点对. 思路:肯定为凸包上的点,可枚举,也可根据凸包性质旋转卡壳求对踵点. 参考博客: https:// ...

  6. POJ 2187 Beauty Contest( 凸包求最远点对 )

    链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...

  7. 【poj2187】 Beauty Contest

    http://poj.org/problem?id=2187 (题目链接) 题意 求点集上两点间最长距离 Solution 凸包+旋转卡壳. 旋转卡壳是看起来很难,但是很好意会也很好实现的算法,但是要 ...

  8. poj 2187 Beauty Contest

    http://poj.org/problem?id=2187 题意:给你n个坐标点 ,求两点之间的最大距离的平方 题解:求出凸包,枚举顶点两两之间的距离 #include<cstdio> ...

  9. POJ - 2187 Beauty Contest(最远点对)

    http://poj.org/problem?id=2187 题意 给n个坐标,求最远点对的距离平方值. 分析 模板题,旋转卡壳求求两点间距离平方的最大值. #include<iostream& ...

最新文章

  1. 基于区域的CNN(R-CNN)
  2. Listen error 错误和 limit of inotify watches was reached
  3. centos7 nat模式配置静态ip_Linux不进入网卡配置文件更改静态ip
  4. Spring Boot 2.x(六):优雅的统一返回值
  5. 《Python 黑科技》10万粉丝头像千图成像(撩对象)
  6. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)
  7. oracle条件语句 如果,Oracle条件语句
  8. JavaScript中有关数据结构和算法的最佳书籍
  9. SQL.变量、运算符、if、while
  10. 0429《与孩子一起学编程》读书笔记1
  11. arduino步进电机程序库_【MM32 eMiniBoard测评报告】+驱动步进电机
  12. 的正确使用_如何正确使用隔离霜
  13. 收集Tomcat异常日志并发送邮件
  14. MSDN Windows XP Professional x64 Edition with SP2 +VL简体中文语言包+序列号
  15. 利用矩阵特征值求解多项式的根
  16. python柱状图加百分比_python matplotlib 为柱状图添加百分比
  17. OpenCV调用摄像头录像并保存下来
  18. 2022电大国家开放大学网上形考任务-农业微生物学非免费(非答案)
  19. 【初学python】用python做一个简单的超市收银台付款系统
  20. 荣耀note10鸿蒙os,荣耀Note20最新确认:7000mAh+双6400万+鸿蒙OS,售价感人

热门文章

  1. 正/负性光刻胶-光刻胶SU-8系列
  2. 如何使用框架进行微信小程序开发(详细版!)
  3. 产业链金融对接央行征信过程
  4. matlab沪深a股量化投资培训班,MATLAB沪深A股量化投资培训班
  5. matlab 自由度,matlab二自由度系统振动
  6. 分享|智慧环保-生态文明信息化解决方案(附PDF)
  7. ios是计算机系统软件,国人所向?PC端六款 iOS 管理软件简评
  8. windows 开启ssh服务器
  9. 克里金插值参数设置Matlab,克里金插值 调用matlab工具箱
  10. 看板管理中看板的定义、构成,以及实际看板案例分享