MnZn求助
查看原帖
MnZn求助
160767
afm_afk楼主2022/1/23 21:05

#4 #6#9#10#11#13#14都没有过,有没有好心人帮我康康是哪里写错了

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long x,y;
}a[100005],p[100005];
bool cmp(node x,node y){
	long long A=atan2(x.y-a[1].y,x.x-a[1].x);
	long long B=atan2(y.y-a[1].y,y.x-a[1].x);
//	cout<<A<<" "<<B<<endl;
	if(A!=B)return A<B;
	if(x.x!=y.x)return x.x<y.x;
	return x.y<y.y;
}
long long cal(node x,node y,node z){
	return (y.x-x.x)*(z.y-y.y)-(y.y-x.y)*(z.x-y.x);
}
long long cal1(node x,node y,node z){
	return abs((x.x-z.x)*(y.y-z.y)-(x.y-z.y)*(y.x-z.x));
}
long long dis(node x,node y){
	return (y.x-x.x)*(y.x-x.x)+(y.y-x.y)*(y.y-x.y);
}
long long read(){
	long long a=0,x=1;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')x=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		a=(a<<1)+(a<<3)+(ch^48);
		ch=getchar();
	}
	return a*x;
}
int n,k;
long long ans;
int main(){
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	n=read();
	k=1;
	for(int i=1;i<=n;i++){
		a[i].x=read(),a[i].y=read();
		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]);
	sort(a+2,a+n+1,cmp);
	p[0]=a[1],p[1]=a[2];
	int tot=1;
	for(int i=3;i<=n;i++){
		while(tot&&cal(p[tot-1],p[tot],a[i])<0)tot--;
		p[++tot]=a[i];
	}
//	cout<<"ok"<<endl;
	p[++tot]=p[0];
	int j=2;
	if(tot<=3){
		cout<<dis(p[0],p[1]);
		return 0;
	}
//	for(int i=0;i<tot;i++){
//		cout<<p[i].x<<" "<<p[i].y<<endl;
//	}
	for(int i=0;i<tot;i++){
		while(cal1(p[i],p[i+1],p[j])<cal1(p[i],p[i+1],p[(j+1)%tot])){
			j=(j+1)%tot;
//			cout<<j<<endl;
		}
		ans=max(ans,max(dis(p[i],p[j]),dis(p[i+1],p[j])));
	}
	
	cout<<ans;
	return 0;
}
2022/1/23 21:05
加载中...