记录编号 144017 评测结果 AAAAAAAA
题目名称 圈奶牛 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2014-12-19 21:10:45 内存使用 0.54 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct www{
	double x,y;
	bool operator < (const www&a)const
	{return y<a.y||(y==a.y&&x<a.x);}
} s[10010];
int n,i,p;
int A[10010]={0},B[10010]={0};
double zj1,zj2,zj3,ans;
void init()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%lf%lf",&s[i].x,&s[i].y);
	sort(s+1,s+(n+1));
}
bool X(int u,int v,int w)
{
	zj3=(s[v].x-s[u].x)*(s[w].y-s[v].y)-(s[w].x-s[v].x)*(s[v].y-s[u].y);
	if(zj3>0)return 1;
	return 0;
}
void PUSHA(int temp)
{
	while(A[0]>1&&X(A[A[0]],A[A[0]-1],temp))A[0]--;
	A[++A[0]]=temp;
}
void PUSHB(int temp)
{
	while(B[0]>1&&!X(B[B[0]],B[B[0]-1],temp))B[0]--;
	B[++B[0]]=temp;
}
double dis(int u,int v)
{
	zj1=s[v].x-s[u].x;zj1*=zj1;
	zj2=s[v].y-s[u].y;zj2*=zj2;
	zj2+=zj1;zj2=sqrt(zj2);
	return zj2;
}
void work()
{
	for(i=1;i<=n;i++)
	PUSHA(i),PUSHB(i);
	ans=0;
	for(i=2;i<=A[0];i++)
	ans+=dis(A[i-1],A[i]);
	for(i=2;i<=B[0];i++)
	ans+=dis(B[i-1],B[i]);
}
int main()
{
	freopen("fc.in","r",stdin);
	freopen("fc.out","w",stdout);
	init();
	work();
	printf("%.2lf\n",ans);
	return 0;
}