93pts求助,#3 WA
查看原帖
93pts求助,#3 WA
48831
Vegiak楼主2021/6/21 19:06
/*
  V   V  EEEEE   GGG   III    A    K   K
  V   V  E      G       I    A A   K KK
  V   V  EEEE   G GGG   I   AAAAA  KK
   V V   E      G   G   I   A   A  K KK
    V    EEEEE   GGG   III  A   A  K   K
*/
#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f
#define delta 0.996
#define mod 998244353
#define cp complex<double>
using namespace std;
int n,k=1,s[100005],num=2,ans,px,py;
struct node{
	int x,y;
}a[100005];
bool cmp(node x,node y)
{
	double A=atan2((x.y-py),(x.x-px));
	double B=atan2((y.y-py),(y.x-px));
	if(A!=B)return A<B;
	else return x.x<y.x;
}
int mtp(node x1,node x2,node y1,node y2)
{
	return (x2.x-x1.x)*(y2.y-y1.y)-(y2.x-y1.x)*(x2.y-x1.y);
} 
int dis(node x,node y)
{
	return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		if(a[i].y<a[k].y||(a[i].y==a[k].y&&a[i].x<a[k].x))k=i;
	}
	swap(a[1],a[k]);
	px=a[1].x,py=a[1].y;
	sort(a+2,a+n+1,cmp);
	s[1]=1;
	s[2]=2;
	for(int i=3;i<=n;i++)
	{
		while(num>1&&mtp(a[s[num-1]],a[s[num]],a[s[num]],a[i])<=0)
		{
			//cout<<"pop"<<s[num]<<endl;
			num--;
		}
		num++;
		s[num]=i;
		//cout<<"add"<<i<<"("<<a[1].x<<","<<a[i].y<<")"<<endl;
	}
	if(num==2)
	{
		cout<<dis(a[s[1]],a[s[2]])<<endl;
		return 0;
	}
	s[num+1]=s[1];
	int j=2;
	for(int i=1;i<=num;i++)
	{
		while(mtp(a[s[j]],a[s[i]],a[s[j]],a[s[i+1]])<mtp(a[s[j+1]],a[s[i]],a[s[j+1]],a[s[i+1]]))j=(j+1)%num;
		ans=max(ans,max(dis(a[s[i]],a[s[j]]),dis(a[s[i+1]],a[s[j]])));
	}
	cout<<ans<<endl;
    return 0;
}
2021/6/21 19:06
加载中...