求助!
查看原帖
求助!
480987
INVINCIBLE1111楼主2021/10/28 13:35
#include<bits/stdc++.h>
using namespace std;
struct node{
      double x,y;
}z[100005],p[100005];
bool cmp(node u,node v){
	return u.x<v.x;
}
bool xl(node a,node b,node c){
	return (a.y-b.y)*(b.x-c.x)>(b.y-c.y)*(a.x-b.x);
}
double kkk(node a,node b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>p[i].x>>p[i].y;
	sort(p+1,p+n+1,cmp);
	z[1]=p[1];
	z[2]=p[2];
	int tot=2;
	for(int i=3;i<=n;i++)
	{
		while(tot>1&&xl(p[i],z[tot],z[tot-1]))
		tot--;
		z[++tot]=p[i];
	}
	double ans=0;
	for(int i=1;i<tot;i++)
	{
		ans+=kkk(z[i],z[i+1]);
	}
	z[1]=p[n];
	z[2]=p[n-1];
	for(int i=n-2;i>=1;i--)
	{
		while(tot>1&&xl(p[i],z[tot],z[tot-1]))
		tot--;
		z[++tot]=p[i];
	}
	for(int i=tot-1;i>=1;i--)
	{
		ans+=kkk(z[i],z[i+1]);
	}
	printf("%.2lf",ans);
}

全WA

2021/10/28 13:35
加载中...