\(\color{#0066ff}{题目描述}\)

贝茜在牛的选美比赛中赢得了冠军”牛世界小姐”。因此,贝西会参观N(2 < = N < = 50000)个农场来传播善意。世界将被表示成一个二维平面,每个农场位于一对整数坐标(x,y),各有一个值范围在-10000…10000。没有两个农场共享相同的一对坐标。

尽管贝西沿直线前往下一个农场,但牧场之间的距离可能很大,所以她需要一个手提箱保证在每一段旅程中她有足够吃的食物。她想确定她可能需要旅行的最大可能距离,她要知道她必须带的手提箱的大小。帮助贝西计算农场的最大距离。

\(\color{#0066ff}{输入格式}\)

第一行:一个整数n

第2~n+1行:xi yi 表示n个农场中第i个的坐标

\(\color{#0066ff}{输出格式}\)

一行:最远距离的平方

\(\color{#0066ff}{输入样例}\)

4
0 0
0 1
1 1
1 0

\(\color{#0066ff}{输出样例}\)

2

\(\color{#0066ff}{数据范围与提示}\)

none

\(\color{#0066ff}{题解}\)

旋转卡壳的裸题了

先求出凸包

然后枚举凸包上的点,维护单调指针

距离可以通过面积判断(底固定,高最大)

注意,本题有巨坑,居然有一条线的情况,怎么TM求凸包!!!!

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cctype>
#define _ 0
#define LL long long
inline LL in() {
LL x = 0, f = 1; char ch;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
while(isdigit(ch)) x = x * 10 + (ch ^ 48), ch = getchar();
return x * f;
}
const int maxn = 50505;
int n;
struct node {
int x, y;
node(int x = 0, int y = 0)
:x(x), y(y) {}
friend node operator - (const node &a, const node &b) {
return node(a.x - b.x, a.y - b.y);
}
friend int operator ^ (const node &a, const node &b) {
return a.x * b.y - a.y * b.x;
}
int mo() {
return x * x + y * y;
}
double jj() {
return atan2((double)y, (double)x);
}
}e[maxn];
int s[maxn], top; int S(node a, node b, node c) {
return (c - a) ^ (c - b);
} int cmp(node a,node b){
return ((a.jj() < b.jj()) || (a.jj() == b.jj() && (a - e[0]).mo() < (b - e[0]).mo()));
}
void tubao() {
int min = 0;
for(int i = 0; i < n; i++) {
e[i].x = in(), e[i].y = in();
if(e[i].y < e[min].y || (e[i].y == e[min].y && e[i].x < e[min].x)) min = i;
}
std::swap(e[0], e[min]);
for(int i = 1; i < n; i++) e[i] = e[i] - e[0];
e[0] = node(0, 0);
std::sort(e + 1, e + n, cmp);
s[0] = 0, s[1] = 1, s[top = 2] = 2;
for(int i = 3; i < n; i++) {
while(top >= 1 && ((e[s[top]] - e[s[top - 1]]) ^ (e[i] - e[s[top]])) <= 0) top--;
s[++top] = i;
}
}
void rotate() {
s[++top] = s[0];
int ans = 0;
int r = 1;
for(int l = 0; l < top; l++) {
while(S(e[s[l]], e[s[l + 1]], e[s[r + 1]]) > S(e[s[l]], e[s[l + 1]], e[s[r]])) r = (r + 1) % top;
ans = std::max(ans, std::max((e[s[l]] - e[s[r]]).mo(), (e[s[l + 1]] - e[s[r]]).mo()));
}
printf("%d\n", ans);
} signed main() {
n = in();
tubao();
rotate();
return 0;
}

P1452 Beauty Contest 旋转卡壳的更多相关文章

  1. poj2187 Beauty Contest(旋转卡壳)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Beauty Contest Time Limit: 3000MS   Memor ...

  2. poj 2187:Beauty Contest(旋转卡壳)

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 32708   Accepted: 10156 Description Bes ...

  3. poj 2187 Beauty Contest , 旋转卡壳求凸包的直径的平方

    旋转卡壳求凸包的直径的平方 板子题 #include<cstdio> #include<vector> #include<cmath> #include<al ...

  4. poj 2187 Beauty Contest——旋转卡壳

    题目:http://poj.org/problem?id=2187 学习材料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...

  5. poj 2187 Beauty Contest —— 旋转卡壳

    题目:http://poj.org/problem?id=2187 学习资料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...

  6. 洛谷 P1452 Beauty Contest 解题报告

    P1452 Beauty Contest 题意 求平面\(n(\le 50000)\)个点的最远点对 收获了一堆计算几何的卡点.. 凸包如果不保留共线的点,在加入上凸壳时搞一个相对栈顶,以免把\(n\ ...

  7. POJ2187Beauty Contest 旋转卡壳

    题目链接 http://poj.org/problem?id=2187 先求凸包 再求凸多边形直径 旋转卡壳模板题 #include<cstdio> #include<cstring ...

  8. 洛谷 P1452 Beauty Contest

    题目背景 此处省略1W字^ ^ 题目描述 贝茜在牛的选美比赛中赢得了冠军”牛世界小姐”.因此,贝西会参观N(2 < = N < = 50000)个农场来传播善意.世界将被表示成一个二维平面 ...

  9. P1452 Beauty Contest

    传送门 求凸包周长,用旋转卡壳,具体可见yyb大佬的博客 顺便一提这题暴力+随机化也能过 暴力代码 //minamoto #include<bits/stdc++.h> #define r ...

随机推荐

  1. 2015.3.3 VC++6制作MFC dll并在其中使用对话框、引入类的操作

    上例建立的dll为非MFC的,不能使用MFC框架,如CString.对话框等类型,使用起来有一定限制.可以建立MFC的Dll来改进.建立MFC Dll的方法: 1.在VC6中新建工程时选择:MFC A ...

  2. Windows下自由创建.htaccess文件的N种方法

    .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控 制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态 ...

  3. Android 4学习(2):概述 - AndroidManifes.xml

    Android应用程序包含下面这几个部分: 程序的前后台: Activities Services 存储: Content Providers 消息传递: Intents Broadcast Rece ...

  4. 关于SQL结构化查询语言中(+)的用法

    一.概述 (+):从符号上理解为添加一些内容进入结果集中,那么自然会问到这么几个问题 1.添加什么内容 2.怎么添加 3.添加到什么结果集中 以下内容将以实例说明上面3个问题. 二.实例 以Oracl ...

  5. Eclipse: “The import java.io cannot be resolved”

    检查一下选项: 重点看jdk的绑定 43down voteaccepted Check your Eclipse preferences: Java -> Installed JREs. The ...

  6. linux 信号量之SIGNAL 0<转>

    我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) ...

  7. office 2010打开doc文档报错:Word 在尝试打开文件时遇到错误

    今天在百度文库中下载了几个文档,下载后发现无法打开.出现以下的提示框. 那么,使用多年office的我,这点小问题当然难不倒我啦. 这个问题是由于系统安全设置所导致的 ,所有我们只需要处理这个安全设置 ...

  8. springmvc配置式开发下的视图解析器

    多个视图解析器优先级:

  9. 全文检索技术---Lucene

    1       Lucene介绍 1.1   什么是Lucene Lucene是apache下的一个开源的全文检索引擎工具包.它为软件开发人员提供一个简单易用的工具包(类库),以方便的在目标系统中实现 ...

  10. Luogu 1357 花园

    发现$m$很小,直接状压起来,可以处理出一开始的合法的状态. 对于每一个合法的状态,可以处理出它的转移方向,即在后面填一个$1$或者填一个$0$,反着处理比较方便. 考虑一下环的情况,在这题中有一个小 ...