POJ 2187 Beauty Contest (凸包&最远点距&旋转卡壳)

2026零成本私有化:OpenClaw一键搭建Discord/Telegram智能机器人,数据不出本地,永久免费替代ChatGPT 如果内置的功能不能满足你的需求,你可以很容易地添加自己的自定义工具。public string Description => "查询指定城市的天气";// 调用天气API获取天气信息return $"city今天的天气是晴,温度25度";// 注册工具今天北京的天气怎么样?大模型的选择很重要:不要盲目追求大参数的模型。对于大多数场景来说,7B参数的模型已经足够用了,而且速度快,内存占用低。上下文长度不要设置太大:上下文长度越大,内存占用越高,推理速度越慢。 阅读详情

http://poj.org/problem?id=2187


思路:算出凸包后枚举凸包上的点。复杂度为O(NlogN+M)

为什么可以枚举?

设坐标的绝对值不超过M,则凸包至多有O(√M)个顶点

证明:以(0,0)为起点画出如下“极限凸包”

(0,0)-(1,0)-(2,1)-(3,3)-(4,6)-...当x每次只增加1时,y增加速率是平方级的,所以凸包至多有O(√M)个顶点。


另一种思路就是用旋转卡壳(RC)算法。复杂度为O(NlogN+√M)


枚举算法的代码:

/*79ms,956KB*/

#include<cstdio>
#include<algorithm>
using namespace std;
const int mx = 50005;

struct P
{
	int x, y;
	P(int x = 0, int y = 0): x(x), y(y) {}
	void read()
	{
		scanf("%d%d", &x, &y);
	}
	P operator - (P& p)
	{
		return P(x - p.x, y - p.y);
	}
	bool operator < (const P& p) const///加cosnt以便sort调用,其他函数不加const对速度没有影响
	{
		return x < p.x || x == p.x && y < p.y;
	}
	int dot(P p)
	{
		return x * p.x + y * p.y;
	}
	int det(P p)
	{
		return x * p.y - y * p.x;
	}
};

P p[mx], ans[mx];
int n, len;

///求凸包
void convex_hull()
{
	sort(p, p + n);
	len = 0;
	int i;
	for (i = 0; i < n; ++i)
	{
		while (len >= 2 && (ans[len - 1] - ans[len - 2]).det(p[i] - ans[len - 1]) <= 0)
			--len;
		ans[len++] = p[i];
	}
	int tmp = len;
	for (i = n - 2; i >= 0; --i)
	{
		while (len > tmp && (ans[len - 1] - ans[len - 2]).det(p[i] - ans[len - 1]) <= 0)
			--len;
		ans[len++] = p[i];
	}
	--len;
}

int main()
{
	int i, j;
	scanf("%d", &n);
	for (i = 0; i < n; ++i) p[i].read();
	convex_hull();
	int mxdis = 0;
	for (i = 1; i < len; ++i)
		for (j = 0; j < i; ++j)
			mxdis = max(mxdis, (ans[i] - ans[j]).dot(ans[i] - ans[j]));
	printf("%d\n", mxdis);
	return 0;
}

旋转卡壳算法的代码:(速度差不多,看来是排序占用了大量时间)

/*79ms,956KB*/

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mx = 50005;

struct P
{
	int x, y;
	P(int x = 0, int y = 0): x(x), y(y) {}
	void read()
	{
		scanf("%d%d", &x, &y);
	}
	P operator - (P p)
	{
		return P(x - p.x, y - p.y);
	}
	bool operator < (const P& p) const
	{
		return x < p.x || x == p.x && y < p.y;
	}
	int dot(P p)
	{
		return x * p.x + y * p.y;
	}
	int det(P p)
	{
		return x * p.y - y * p.x;
	}
};

P p[mx], ans[mx];
int n, len;

///求凸包
void convex_hull()
{
	sort(p, p + n);
	len = 0;
	int i;
	for (i = 0; i < n; ++i)
	{
		while (len >= 2 && (ans[len - 1] - ans[len - 2]).det(p[i] - ans[len - 1]) <= 0)
			--len;
		ans[len++] = p[i];
	}
	int tmp = len;
	for (i = n - 2; i >= 0; --i)
	{
		while (len > tmp && (ans[len - 1] - ans[len - 2]).det(p[i] - ans[len - 1]) <= 0)
			--len;
		ans[len++] = p[i];
	}
	--len;
	memcpy(p, ans, sizeof(P) * len);
}

inline int next(int i)
{
	return (i + 1) % len;
}

int RC(int si, int sj)
{
	int mxdis = 0, i = si, j = sj;
	while (i != sj || j != si)
	{
		mxdis = max(mxdis, (p[i] - p[j]).dot(p[i] - p[j]));
		if ((p[next(i)] - p[i]).det(p[next(j)] - p[j]) > 0) j = next(j);
		else i = next(i);
	}
	return mxdis;
}

int main()
{
	int i, si = 0, sj = 0;
	scanf("%d", &n);
	for (i = 0; i < n; ++i) p[i].read();
	convex_hull();
	if (len == 2) printf("%d\n", (p[0] - p[1]).dot(p[0] - p[1]));
	else
	{
		for (i = 0; i < len; ++i)
		{
			if (!(p[si] < p[i])) si = i;
			if (p[sj] < p[i]) sj = i;
		}
		printf("%d\n", RC(si, sj));
	}
	return 0;
}

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置) 本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。 阅读详情

相关推荐

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6244

【凸包直径&平面最远点对&对锺点(旋转卡壳)】poj 2187 Beauty Contest

poj 2187 Beauty Contesthttp://poj.org/problem?id=2187问题描述:平面点集上最远点对&凸包直径&对锺点首先构造凸包,遍历所有点与点距离,取最大值。这是利用了凸包上的点相比 点集中的点 一般是很少的 平均情况很好 并且我们也能AC这个问题但是这是有局限性的 当凸包上的点达到O(N)的级别时 凸包的优化作用就不存在了不过我们还要考虑到 凸包还起了对凸包上

Hacker_vision 684

转子动力学 | 临界速度与稳定性分析

本文深入探讨了转子动力学中的核心问题——临界速度与稳定性分析。临界速度是旋转机械发生共振的危险转速,通过模态分析和坎贝尔图可进行预测。文章还剖析了油膜涡动等稳定性问题,并结合ANSYS仿真案例,详细阐述了从建模、分析到设计优化的完整工程实践流程,为旋转机械的可靠设计与安全运行提供关键指导。

weixin_29313239的博客 518

POJ 2187 Beauty Contest 构造凸包 + 旋转卡壳

在刷了一整版的 TLE 和 WA 外加一个CE和几个OLE之后终于拿到了第一个旋转卡壳的AC。。。泪奔 http://blog.youkuaiyun.com/ACMaker/archive/2008/10/29/3176910.asp http://cgm.cs.mcgill.ca/~orm/rotcal.frame.html 历史: 1978年, M.I. Shamo

自在飞花 1189

机器学习第五章之决策树模型

机器学习专题系列

wangyutao12345的博客 5187

SystemRDL:从寄存器描述到自动化生成的完整指南

本文详细介绍了SystemRDL如何通过“一份描述,多处生成”的理念,彻底解决芯片与FPGA设计中手动维护寄存器带来的不一致与低效问题。文章提供了从语言快速上手、核心组件讲解到使用PeakRDL工具链实现自动化代码与文档生成的完整实战指南,帮助硬件工程师构建高效、可靠的寄存器开发流程。

weixin_29243279的博客 660

【POJ2187】Beauty Contest

大致题意:给定一个散点集,求最远点距的平方。 题解:旋转卡壳裸题 代码如下: 1 #include&lt;cstdio&gt; 2 #include&lt;iostream&gt; 3 #include&lt;algorithm&gt; 4 #include&lt;cmath&gt; 5 #define MN 50005 6 using namespace...

diludiliang27877的博客 143

Java 处理地理信息数据[DEM TIF文件数据获取高程]

EPSG 是一个国际标准,用于唯一标识地理坐标系和投影坐标系。

两点 1279

poj 2187 Beauty Contest

求平面最远点对。 朴素的O(n^2)算法显然超时。这里用到了一种旋转卡壳算法,逆时针开始找,找到第一对对踵点(被一对卡壳正好卡住的对应点),那么以后的点也必然是逆时针排列的。找对踵点可以用一条边找另一点使得该三角形面积最大,之后比较边端点与该点距离即可。 View Code 1 /* 2 Coder:Zhaofa Fang 3 Lang:C++ 4 */ 5...

diaoqisi8354的博客 119

8、多导睡眠图记录中基于级联自适应滤波器的脑电图信号噪声去除

本文提出了一种基于三级级联自适应滤波器的新型方法,用于去除多导睡眠图(PSG)记录中脑电图(EEG)信号的常见伪迹,包括50/60 Hz电源线干扰、心电图(ECG)和眼电图(EOG)伪迹。该方法采用最小均方(LMS)算法,通过分阶段滤波有效分离并衰减各类噪声,在保留EEG关键神经节律信息的同时显著提升信号质量。研究利用MIT-BIH数据库中的18份真实PSG记录进行验证,结果表明该方法具有无相位失真、实现简单、自适应能力强等优势,适用于睡眠研究及脑机接口等生物医学应用领域。

banana的博客 174

Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

十多年IT经验,专注机器视觉,智能制造半导体行业 578

POJ 2187 Beauty Contest(凸包直径)

初级旋转卡壳get! 题意:给出一个点集,求点集中最远的两个点的距离的平方。 首先求一遍凸包(可以仅保留转折点),然后通过旋转卡壳(复杂度:o(nlogn))得到直径。 对于凸包的某一个点,凸包上总会有一个点距离它最远,并且是该点的对踵点。 对踵点: 如果过凸包上的两个点可以画一对平行直线, 使凸包上的所有点都夹在两条平行线之间或落在平行线上, 那么这两个点叫做一

Just One Last Coding~♬ 772

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1612

POJ 2187 Beauty Contest凸包 旋转卡壳法

Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, earning the title 'Miss Cow World'. As a result, Bessie will make a tour of N (2 &lt;= N &lt;= 50,000...

weixin_30617561的博客 172

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

poj2187 Beauty Contest (凸包 + 旋转卡壳)

Beauty Contest Time Limit:3000MS Memory Limit:65536K Total Submissions:38349 Accepted:11851 Description Bessie, Farmer John's prize cow, has just won first pla...

weixin_30612769的博客 117

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

POJ 2187 Beauty Contest 旋转卡壳

http://poj.org/problem?id=2187 旋转卡壳的思想并不难,你就想象是两个平行直线夹住凸包...求的就是夹住的两个对锺点... 这题更容易了...求出所有对锺点以后直接一遍扫过去求最大点距就行了... 用的是一个结论: s[i],s[i+1],s[q] 构成的三角形只要面积最大&lt;s[i],s[q]&gt; 和 &lt;s[i+1],s[q]&gt;就一定是对锺点...

weixin_30426879的博客 93

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pku 2187 Beauty Contest 凸包+旋转卡壳法

http://poj.org/problem?id=2187 给定平面上的一群点求任意两点的最远距离,如果枚举任意两点的话复杂度为o(n^2),在这里肯定超时。可以利用凸包将点的范围缩小到凸包的顶点上再循环枚举任意两点,这里最坏情况也为O(n^2)。不过这里貌似可以过的。另一种方法就是旋转卡壳法了,意思就是寻找任意边的最远点(凸包上的顶点),然后计算该点到两端点的最远距离即可。 旋转卡壳法 学...

weixin_30338497的博客 117

poj2187 Beauty Contest

传送门 求平面上距离最远的两个点距离的平方。 凸包,旋转卡壳。 抄板选手的日常。 1 //Achen 2 #include&lt;algorithm&gt; 3 #include&lt;iostream&gt; 4 #include&lt;cstring&gt; 5 #include&lt;cstdlib&gt; 6 #include&lt;vector...

weixin_30532837的博客 89

POJ 1835 宇航员 (模拟&三维向量旋转)

宇航员 http://poj.org/problem?id=1835 Time Limit: 2000MS Memory Limit: 30000K Description 问题描述:    宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下

AC,∑ndless 3251

POJ 1912 A highway and the seven dwarfs (凸包&O(logN)判断直线是否与凸包相交)

http://poj.org/problem?id=1912 思路:构造好凸包后,二分找凸包上第一个与正向直线夹角大于0的线段和第一个与反向直线夹角大于0的线段 然后判断两线段的起点是否在直线两侧即可。 完整代码: /*2672ms,4624KB*/ #include #include #include using namespace std; const double

AC,∑ndless 2828

UVa 190 Circle Through Three Points (求不共线三点所确定的圆的方程)

190 - Circle Through Three Points Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=126 The solution is to be printed as an equation of

AC,∑ndless 2561

POJ 2242 The Circumference of the Circle (计算几何)

The Circumference of the Circle http://poj.org/problem?id=2242 Time Limit: 1000MS Memory Limit: 65536K Description To calculate the circumference of a circle seems to be an easy

AC,∑ndless 2236

UVa 10902 / POJ 2653 Pick-up Sticks (线段与线段相交)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1843 http://poj.org/problem?id=2653 思路: 枚举即可,注意是“任意时刻”没有超过1000个top sticks,要不然最坏复杂度就是O(n^2)了。

AC,∑ndless 2000
上一篇: 史上最全的SGU题目分类
下一篇: POJ 2079 Triangle (凸包中的最大三角形&旋转卡壳)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值