#include #include #include #include #include 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]; stacks; int sign(double d) { if(fabs(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=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 (周长跟多边形形状有关)错了,无关,自带四舍五入 return 0; }