• 【洛谷 P5143】攀爬者 题解(结构体排序)


    攀爬者

    题目背景

    HKE 考完 GDOI 之后跟他的神犇小伙伴们一起去爬山。

    题目描述

    他在地形图上标记了 N N N 个点,每个点 P i P_i Pi 都有一个坐标 ( x i , y i , z i ) (x_i,y_i,z_i) (xi,yi,zi)。所有点对中,高度值 z z z 不会相等。HKE 准备从最低的点爬到最高的点,他的攀爬满足以下条件:

    (1) 经过他标记的每一个点;

    (2) 从第二个点开始,他经过的每一个点高度 z z z 都比上一个点高;

    (3) HKE 会飞,他从一个点 P i P_i Pi 爬到 P j P_j Pj 的距离为两个点的欧几里得距离。即, ( X i − X j ) 2 + ( Y i − Y j ) 2 + ( Z i − Z j ) 2 \sqrt{(X_i-X_j)^2+(Y_i-Y_j)^2+(Z_i-Z_j)^2} (XiXj)2+(YiYj)2+(ZiZj)2

    现在,HKE 希望你能求出他攀爬的总距离。

    输入格式

    第一行,一个整数 N N N 表示地图上的点数。

    接下来 N N N 行,三个整数 x i , y i , z i x_i,y_i,z_i xi,yi,zi 表示第 i i i 个点的坐标。

    输出格式

    一个实数,表示 HKE 需要攀爬的总距离(保留三位小数)

    样例 #1

    样例输入 #1

    5
    2 2 2
    1 1 1
    4 4 4
    3 3 3
    5 5 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    样例输出 #1

    6.928
    
    • 1

    提示

    对于100%的数据, 1 ≤ N ≤ 50000 1\leq N\leq 50000 1N50000,答案的范围在 double 范围内。


    思路

    按高度对结构体数组进行排序,然后求两点间欧几里得距离的和。

    注意:保留三位小数。


    AC代码

    #include 
    #include 
    #include 
    #define AUTHOR "HEX9CF"
    using namespace std;
    
    const int N = 1e5 + 5;
    
    int n;
    double ans;
    
    struct Sp
    {
        double x, y, z;
    } p[N];
    
    // 欧几里得距离
    double d(int a, int b)
    {
        return sqrt(pow(p[a].x - p[b].x, 2) + pow(p[a].y - p[b].y, 2) + pow(p[a].z - p[b].z, 2));
    }
    
    bool cmp(Sp a, Sp b) {
        return a.z < b.z;
    }
    
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> p[i].x >> p[i].y >> p[i].z;
        }
        sort(p + 1, p + n + 1, cmp);
        for (int i = 1; i < n; i++)
        {
            ans += d(i, i + 1);
        }
        printf("%.3lf\n", ans);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    工作小计 zookpeer3.8 C api环境搭建
    【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
    关于一些网络的概述
    sass和 scss的区别?
    【单片机】单片机的核心思想
    leetcode201 Bitwise AND of Numbers Range
    C语言第五章第1-2节用while语句实现循环学习导案
    云原生时代下的 12-factor 应用与实践
    Spring Boot 自动配置原理
    GB/T 26518-2023 高分子增强复合防水片材检测
  • 原文地址:https://blog.csdn.net/qq_34988204/article/details/134255575