RT
感觉也没毛病,不也是绕了一圈走完所有点么
#include<cstdio>
#include<bitset>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
inline int read()
{
int x=0,y=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-')
y=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
x=x*10+c-'0';
c=getchar();
}
return x*y;
}
const int N=1005;
struct point{
double x,y;
}a[N];
int n;
bool cmp(point u,point v)
{
return ((u.x-a[1].x)/(u.y-a[1].y))>((v.x-a[1].x)/(v.y-a[1].y));
}
inline double js(double xa,double ya,double xb,double yb)
{
return sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));
}
signed main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=(point){(double)(read()),(double)(read())};
int mny=2e9,mnyx=2e9,mnn=0;
for(int i=1;i<=n;i++)
{
if(a[i].y<mny||(a[i].y==mny&&a[i].x<mnyx))
mny=a[i].y,mnyx=a[i].x,mnn=i;
}
a[0]=a[1];
a[1]=a[mnn];
a[mnn]=a[0];
sort(a+2,a+n+1,cmp);
// for(int i=1;i<=n;i++)
// printf("%lf %lf\n",a[i].x,a[i].y);
double ans=0;
for(int i=1;i<n;i++)
ans+=js(a[i].x,a[i].y,a[i+1].x,a[i+1].y);
ans+=js(a[n].x,a[n].y,a[1].x,a[1].y);
printf("%.2lf",ans);
}