Vijos 1007 绕钉子的长绳子

xiaoxiao2021-02-28  52

背景

平面上有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)来代替。

#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; }
转载请注明原文地址: https://www.6miu.com/read-2619235.html

最新回复(0)