洛谷P1513 — 绕钉子的长绳子

题目背景

平面上有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;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部