题目背景
平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。
现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。
题目描述
求出绳子的长度
题目链接
https://www.luogu.org/problem/P1513
输入格式
第1行两个数:整数N(1<=N<=100)和实数R。
接下来N行按逆时针顺序给出N个钉子中心的坐标
坐标的绝对值不超过100。
输出格式
一个数,绳子的长度,精确到小数点后2位。
样例输入
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
样例输出
14.28
说明/提示
如果你用比较复杂的方法AC了,请想一想有没有更加简便的方法。
本题来自URAL1020,翻译来自NOCOW。
题目分析
绳子绕了一圈,绳子的长度为半径为 R 的圆的周长再加上相邻钉子的中心之间的距离。如果还不太清楚,可以把样例中的图形画出来。
AC代码
#include <bits/stdc++.h>
using namespace std;
//一个 r 圆的周长加所有钉子中心的距离
int main()
{
int n;
double x[100], y[100], ans = 0, r; //注意r是实数
cin >> n >> r;
ans = 2 * M_PI * r;
for (int i = 0; i < n; i++)
{
cin >> x[i] >> y[i];
if (i > 0)
ans += sqrt(pow(x[i] - x[i - 1], 2) + pow(y[i] - y[i - 1], 2));
}
ans += sqrt(pow(x[n - 1] - x[0], 2) + pow(y[n - 1] - y[0], 2));
printf("%.2f\n", ans);
return 0;
}