记录编号 |
144017 |
评测结果 |
AAAAAAAA |
题目名称 |
圈奶牛 |
最终得分 |
100 |
用户昵称 |
水中音 |
是否通过 |
通过 |
代码语言 |
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;
}