题目背景

此处省略1W字^ ^

题目描述

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

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

输入输出格式

输入格式:

第一行:一个整数n

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

输出格式:

一行:最远距离的[b]平方[/b]

输入输出样例

输入样例#1:

4
0 0
0 1
1 1
1 0
输出样例#1:

2

说明

NONE

旋转卡壳模板题,求个凸包之后用叉积求出离当期枚举直线的最远点(肯定是单调变化的)

/*
排序一定要严格按x第一关键字,y第二关键字升序排序,,,
不然后果就是WA一墙调半天不知道哪错的hhhh
*/
#include<bits/stdc++.h>
#define ll long long
#define maxn 50005
using namespace std;
const double eps=0.000000001; inline int zt(double x){
if(fabs(x)<=eps) return ;
return (x>?:-);
} inline double sq(double x){
return x*x;
} struct node{
double x,y; node operator +(const node& u)const{
return (node){x+u.x,y+u.y};
} node operator -(const node& u)const{
return (node){x-u.x,y-u.y};
} node operator *(const double& u)const{
return (node){x*u,y*u};
} bool operator <(const node& u)const{
return zt(x-u.x)?zt(x-u.x)<:zt(y-u.y)<;
}
}a[maxn],q[maxn],ret[maxn]; inline double ptmul(node x,node y){
return x.x*y.x+x.y*y.y;
} inline double Xmul(node x,node y){
return x.x*y.y-x.y*y.x;
} inline bool eq(node x,node y){
return (!zt(x.x-y.x)&&!zt(x.y-y.y));
} inline double dist(node x,node y){
return sq(x.x-y.x)+sq(x.y-y.y);
} inline int get_hill(node *u,int len){
sort(u+,u+len+); int tt=,tot=;
q[]=u[],q[]=u[];
for(int i=;i<=len;i++){
while(tt>&&zt(Xmul(q[tt]-q[tt-],u[i]-q[tt]))<) tt--;
q[++tt]=u[i];
}
for(int i=;i<=tt;i++) ret[++tot]=q[i]; tt=;
q[]=u[],q[]=u[];
for(int i=;i<=len;i++){
while(tt>&&zt(Xmul(q[tt]-q[tt-],u[i]-q[tt]))>) tt--;
q[++tt]=u[i];
}
int pre=tot;
for(int i=tt;i;i--) if(!eq(q[i],ret[])&&!eq(q[i],ret[pre])) ret[++tot]=q[i]; for(int i=;i<=tot;i++) u[i]=ret[i];
return tot;
} int n;
double ans=; inline void solve(){
node r=a[]-a[n];
int pt=,nxt=; while(zt(fabs(Xmul(r,a[nxt]-a[n]))-fabs(Xmul(r,a[pt]-a[n])))>){
pt=nxt,nxt++;
if(nxt>n) nxt-=n;
}
ans=max(ans,max(dist(a[],a[pt]),dist(a[n],a[pt]))); for(int i=;i<n;i++){
r=a[i+]-a[i];
while(zt(fabs(Xmul(r,a[nxt]-a[i]))-fabs(Xmul(r,a[pt]-a[i])))>){
pt=nxt,nxt++;
if(nxt>n) nxt-=n;
}
ans=max(ans,max(dist(a[i],a[pt]),dist(a[i+],a[pt])));
} } int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y); n=get_hill(a,n); solve(); printf("%.0lf\n",ans);
return ;
}

洛谷 P1452 Beauty Contest的更多相关文章

  1. 洛谷 P1452 Beauty Contest 解题报告

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

  2. [洛谷P1452]Beauty Contest

    题目大意:给你$n$个点,求出其中最远点的距离 题解:求出凸包,最远点一定都在凸包上,可以对每条边求出最远的点(可以双指针),然后求出和这条边的端点的距离,更新答案 卡点:最开始对每个点求出最远点,但 ...

  3. 【洛谷 P1452】 Beauty Contest (二维凸包,旋转卡壳)

    题目链接 旋转卡壳模板题把. 有时间再补总结吧. #include <cstdio> #include <cmath> #include <algorithm> u ...

  4. 洛谷P4645 [COCI2006-2007 Contest#7] BICIKLI [Tarjan,拓扑排序]

    题目传送门 BICIKLI 题意翻译 给定一个有向图,n个点,m条边.请问,1号点到2号点有多少条路径?如果有无限多条,输出inf,如果有限,输出答案模10^9的余数. 两点之间可能有重边,需要看成是 ...

  5. P1452 Beauty Contest 旋转卡壳

    \(\color{#0066ff}{题目描述}\) 贝茜在牛的选美比赛中赢得了冠军"牛世界小姐".因此,贝西会参观N(2 < = N < = 50000)个农场来传播善 ...

  6. P1452 Beauty Contest

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

  7. 洛谷P4891 序列 || 膜法阵,魔法阵

    https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...

  8. Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化

    https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...

  9. BZOJ 1901 洛谷 P2617 ZOJ 2112 Dynamic Rankings

    以下时空限制来自zoj Time limit 10000 ms Memory limit 32768 kB OS Linux Source Online Contest of Christopher' ...

随机推荐

  1. HNOI2002 彩票 [搜索]

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  2. angular响应式编程

    1.响应式编程 例子import {Observable} from "rxjs/Observable"; Observable.from([1,2,3,4]) .filter(( ...

  3. HDU2066一个人的旅行---(多起点多终点最短路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memo ...

  4. centos7装机时更改网卡名为eth0操作

  5. C# 反射 名称不区分大小写

    一 Type type = Type.GetType(className,false,true); //第一个是“类型的全名”,第二个参数:找不到时触发异常,第三个参数:寻找的时候是否忽略大小写 二 ...

  6. hdu 2817 A sequence of numbers(快速幂取余)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2817 题目大意:给出三个数,来判断是等差还是等比数列,再输入一个n,来计算第n个数的值. #inclu ...

  7. javascript中实例方法与类方法的区别

    在javascript中,类有静态属性和实例属性之分,也有静态方法和实例方法之分 类属性(静态属性):通过类直接访问,不需要声明类的实例来访问 类方法(静态方法):通过类直接访问,不需要声明类的实例来 ...

  8. python+msf 制作 windows远控

    最近分析的一个远控,后发现是meterpreter rever http shell,文件是个打包的python(打包成exe),感谢wstone的指导~ 创建dll ./msfpayload win ...

  9. 【IDEA】设置类头注释和方法注释

    idea和eclipse的注释还是有一些差别的. 类头注释: 打开file->setting->Editor->Filr and Code Templates->Include ...

  10. celery后台运行

    参考:https://blog.csdn.net/qq_18863573/article/details/52437689 pip install supervisor # 要用python2的pip ...