多边形与圆
题号:NC203374
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

一个半径为r的空心圆,内部有一个n个点的凸多边形,这个多边形在圆壳的内部滚动。多边形顶点按照逆时针顺序给出,保证每一个顶点都有机会接触圆壳。

起初,1号点,2号点一定在圆上,初始以1号点为轴心、然后依次以2, 3, ..., n号点为轴心“滚动”。具体地讲,在以i号点为轴心“滚动”时,多边形将保持i号点不动,并以该点为中心开始顺时针旋转,直到i+1号点接触圆为止,然后更换轴心,继续“滚动”。

求多边形从初始开始滚动、直到1号点再次到达圆上成为轴心为止,1号点在整个滚动过程中所经过的路程是多少。

输入描述:

第一行输入两个正整数 
接下来 n 行,每行两个浮点数 代表 i 号点的初始坐标。

输出描述:

输出一行一个浮点数,代表答案。
示例1

输入

复制
3 5
0 0
1 0
0 3

输出

复制
8.05082557797666886756

备注:




本题使用spj评测,只要绝对值误差不超过 即可评测通过。样例虽然不满足 r 的限制,但是是一个好的样例,你的程序应当能够通过样例。