66 lines
1.6 KiB
C++
66 lines
1.6 KiB
C++
|
#include <iostream>
|
|||
|
#include <cmath>
|
|||
|
#include <cstdio>
|
|||
|
#include <algorithm>
|
|||
|
#include<stack>
|
|||
|
using namespace std;
|
|||
|
const double pi=acos(-1.00),eps = 1e-6;//pi3.14~
|
|||
|
const int N=1001,inf=0x3f3f3f3f;
|
|||
|
double ans=0;
|
|||
|
struct dot{
|
|||
|
int x,y;
|
|||
|
}d[N];
|
|||
|
stack<int>s;
|
|||
|
int sign(double d)
|
|||
|
{
|
|||
|
if(fabs(d)<eps) return 0;
|
|||
|
return d>0? 1:-1;
|
|||
|
}
|
|||
|
double cross(double x1, double y1, double x2, double y2)
|
|||
|
{
|
|||
|
return x1 * y2 - x2 * y1;
|
|||
|
}
|
|||
|
double length(int x1,int y1,int x2,int y2)
|
|||
|
{
|
|||
|
int x=x1-x2,y=y1-y2;
|
|||
|
return sqrt((double)x*x+y*y);//CE double
|
|||
|
}
|
|||
|
int main()
|
|||
|
{
|
|||
|
int n,l,minn=1,f,ff,x0,x1,x2,y1,y2,y0;
|
|||
|
scanf("%d%d",&n,&l);
|
|||
|
for(int i=1;i<=n;i++)
|
|||
|
{
|
|||
|
scanf("%d%d",&d[i].x,&d[i].y);//&!!!
|
|||
|
minn=d[i].y<d[minn].y? i:minn;
|
|||
|
}
|
|||
|
int j=(n+minn-2)%n+1;
|
|||
|
// s.push(minn%n+1);
|
|||
|
s.push(minn);
|
|||
|
s.push(j);
|
|||
|
ans+=length(d[j].x,d[j].y,d[minn].x,d[minn].y);//©<>˳<EFBFBD>ʼ<EFBFBD>ı<EFBFBD>
|
|||
|
while(j!=minn)
|
|||
|
{
|
|||
|
j=(j+n-2)%n+1;
|
|||
|
f=s.top();
|
|||
|
s.pop();
|
|||
|
ff=s.top();
|
|||
|
while(0>=sign(cross(d[f].x-d[ff].x,d[f].y-d[ff].y,d[j].x-d[ff].x,d[j].y-d[ff].y)))
|
|||
|
{
|
|||
|
ans-=length(d[f].x,d[f].y,d[ff].x,d[ff].y);
|
|||
|
// printf("--%d(%d,%d),%d(%d,%d): -%lf=%lf\n",f,d[f].x,d[f].y,ff,d[ff].x,d[ff].y,length(d[f].x,d[f].y,d[ff].x,d[ff].y),ans);
|
|||
|
f=s.top();
|
|||
|
s.pop();
|
|||
|
if(s.empty()) break;//RE
|
|||
|
ff=s.top();
|
|||
|
}
|
|||
|
ans+=length(d[j].x,d[j].y,d[f].x,d[f].y);
|
|||
|
// printf("++%d(%d,%d),%d(%d,%d): +%lf=%lf\n",j,d[j].x,d[j].y,f,d[f].x,d[f].y,length(d[j].x,d[j].y,d[f].x,d[f].y),ans);
|
|||
|
s.push(f);
|
|||
|
s.push(j);
|
|||
|
}
|
|||
|
// printf("%d ",s.size());
|
|||
|
printf("%.0lf",ans+2*l*pi);//WA*2 <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>йأ<D0B9><D8A3><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3>أ<DEB9><D8A3>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return 0;
|
|||
|
}
|