1 条题解

  • 0

    题意分析

    给定NN个点构成的凸多边形顶点坐标和钉子半径RR,计算缠绕所有钉子的绳子总长度(绳子紧贴多边形并包裹每个钉头)。

    解题思路

    1. 计算凸多边形周长(相邻顶点欧氏距离之和)
    2. 加上钉头包裹长度(2πR2\pi R
    3. 输出总长度(保留22位小数)

    实现步骤

    1. 输入NNRR,读取NN个顶点坐标
    2. 遍历顶点计算相邻点距离并累加
    3. 总长度==周长和+2πR+ 2\pi R
    4. 输出结果(%.2f格式)

    代码实现

    #include <iostream>
    #include <iomanip>
    #include <vector>
    #include <cmath>
    using namespace std;
    
    struct Point {
        double x, y;
    };
    
    // 自定义距离函数,计算两点之间的欧几里得距离
    double euclideanDistance(const Point& a, const Point& b) {
        return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
    }
    
    int main() {
        int n;
        double r;
        cin >> n >> r;
        
        vector<Point> points(n);
        for (int i = 0; i < n; ++i) {
            cin >> points[i].x >> points[i].y;
        }
        
        double sum = 0.0;
        for (int i = 0; i < n; ++i) {
            int j = (i + 1) % n;
            sum += euclideanDistance(points[i], points[j]); // 使用重命名后的函数
        }
        
        // 加上圆的周长
        sum += 2 * M_PI * r;
        
        // 输出结果,保留两位小数
        cout << fixed << setprecision(2) << sum << endl;
        
        return 0;
    }
    
    • 1