背景
平面上有N個圓柱形的大釘子,半徑都為R,所有釘子組成一個凸多邊形。
現在你要用一條繩子把這些釘子圍起來,繩子直徑忽略不計。
描述
求出繩子的長度
格式
輸入格式
第1行兩個數:整數N(1<=N<=100)和實數R。
接下來N行按逆時針順序給出N個釘子中心的坐标
坐标的絕對值不超過100。
輸出格式
一個數,繩子的長度,精确到小數點後2位。
樣例1
樣例輸入1
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
樣例輸出1
14.28
思路:繩子的長度為2*PI*R+所有相鄰點的距離。因為繩子逆時針繞一圈又回到原點是以應該是2*PI*R,不在弧上的點是直線。圖下(畫的不好不要介意)。下面是C++代碼段。sqrt(x*x+y*y)也可以用hypot(double x,double y)來代替。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXxsmaOdXQ610dNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN2EjMzEjM2EzNwcDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
#include<iostream>
#include<math.h>
using namespace std;
const int N=100;
const double PI=3.1415926;
int main()
{
int n;
double r;
double x_arr[N],y_arr[N];
cin>>n>>r;
for(int i=0;i<n;i++)
{
cin>>x_arr[i]>>y_arr[i];
}
double len=0;
for(int i=0;i<n-1;i++)
{
len=len+sqrt((x_arr[i]-x_arr[i+1])*(x_arr[i]-x_arr[i+1])+(y_arr[i]-y_arr[i+1])*(y_arr[i]-y_arr[i+1]));
}
len=len+sqrt((x_arr[0]-x_arr[n-1])*(x_arr[0]-x_arr[n-1])+(y_arr[0]-y_arr[n-1])*(y_arr[0]-y_arr[n-1])) ;
len=len+2*PI*r;
printf("%.2f\n",len);
return 0;
}