前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P1452 Beauty Contes

P1452 Beauty Contes

作者头像
attack
发布2018-04-12 11:13:09
5210
发布2018-04-12 11:13:09
举报

题目背景

此处省略1W字^ ^

题目描述

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

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

输入输出格式

输入格式:

第一行:一个整数n

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

输出格式:

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

输入输出样例

输入样例#1:

代码语言:javascript
复制
4
0 0
0 1
1 1
1 0

输出样例#1:

代码语言:javascript
复制
2

说明

NONE

本来想练习一下旋转卡壳,

但是n^2的暴力居然A了。,,。。

既然A了,。。。

那就不写旋转卡壳23333333

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #define vec point
 7 using namespace std;
 8 const double eps=1e-8;
 9 const int MAXN=50001;
10 int n;
11 void read(int &n)
12 {
13     char c='+';int x=0;bool flag=0;
14     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
15     while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();}
16     flag==1?n=-x:n=x;
17 }
18 inline int dcmp(double x)
19 {
20     if(fabs(x)<eps)    return 0;
21     else return x>0?1:-1;
22 }
23 struct point
24 {
25     double x,y;
26     inline point(double x=0,double y=0):x(x),y(y){};
27 }p[MAXN],ch[MAXN];
28 vec operator - (vec a,vec b) {return vec(a.x-b.x,a.y-b.y);}
29 vec operator + (vec a,vec b) {return vec(a.x+b.x,a.y+b.y);}
30 vec operator == (vec a,vec b){return (dcmp(a.x-b.x)==0&&dcmp(a.y-b.y)==0);} 
31 int comp(const point &a,const point &b)
32 {
33     if(a.x==b.x)    return a.y<b.y;
34     else    return a.x<b.x;
35 }
36 int stack[MAXN];
37 double cross(vec a,vec b){return a.x*b.y-a.y*b.x;}
38 int convex_hull()
39 {
40     sort(p+1,p+n+1,comp);
41     int top=1;
42     for(int i=1;i<=n;i++)
43     {
44         while(top>2&& dcmp(cross(ch[top-1]-ch[top-2], p[i]-ch[top-2]))<=0)    top--;
45         ch[top++]=p[i];
46     }
47     int tmp=top+1;
48     for(int i=n-1;i>=1;i--)
49     {
50         while(top+1>tmp&& dcmp(cross(ch[top-1]-ch[top-2], p[i]-ch[top-2]))<=0)    top--;
51         ch[top++]=p[i];
52     }
53     if(n>2) top--;
54     return top;
55 }
56 int dis(point a,point b)
57 {
58     return    ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
59 }
60 int main()
61 {
62     //freopen("fc.in","r",stdin);
63     //freopen("fc.out","w",stdout);
64     read(n);
65     //ios::sync_with_stdio(0);
66     for(int i=1;i<=n;i++)
67     {
68         double a,b;
69         cin>>a>>b;
70         p[i]=point(a,b);
71     }
72     int num=convex_hull();
73     int ans=0;
74     for(int i=1;i<=num;i++)
75         for(int j=1;j<=num;j++)
76         ans=max(ans,(int) dis(ch[i],ch[j]));
77     
78     printf("%d",ans);
79     return 0;
80 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目背景
  • 题目描述
  • 输入输出格式
  • 输入输出样例
  • 说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档