1 条题解
-
0
自动搬运
来自洛谷,原作者为

gzj__
喵||天生我菜必有用,千分散尽爆零来||互关见 www.luogu.me/paste/5lojcq2f 喵||可能会杀关,杀关后会用小号会回||请不要杀关我 谢谢喵搬运于
2025-08-24 22:07:35,当前版本为作者最后更新于2025-08-11 10:12:39,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
解题思路:
首先要确定经过这些点的先后顺序,因为必须从最低到最高依次经过,所以需要按高度对所有点进行排序;然后按照排好的顺序,计算每相邻两个点之间的直线距离,再把这些距离全部加起来,得到的就是总距离。
AC Code:
#include<bits/stdc++.h> using namespace std; // 定义结构体node,用于存储三维空间中点的坐标信息 struct node{ int x,y,z; //分别表示点的x坐标、y坐标和z坐标(高度) }p[50000]; //声明一个node类型的数组p,最多可存储50000个点 //定义比较函数cmp,用于排序时按照点的z坐标(高度)从小到大排序 bool cmp(node a,node b){ return a.z<b.z; //当a的z值小于b的z值时,a排在b前面 } int main(){ int n; //声明变量n,用于存储点的数量 cin>>n; //从标准输入读取点的数量n //循环读取n个点的坐标信息,存储到数组p中 for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y>>p[i].z; //依次读取每个点的x、y、z坐标 // 对数组p中的n个点按照z坐标从小到大进行排序 sort(p,p+n,cmp); double s=0; //双精度浮点型变量s,用于累加总距离,初始值为0 //循环计算排序后相邻两个点之间的距离,并累加到s中 for(int i=1;i<n;i++){ //计算当前点与前一个点在x方向上的差值 double dx=p[i].x-p[i-1].x; //计算当前点与前一个点在y方向上的差值 double dy=p[i].y-p[i-1].y; //计算当前点与前一个点在z方向上的差值 double dz=p[i].z-p[i-1].z; //根据三维空间两点间距离公式计算距离,并累加到总距离s中 s+=sqrt(dx*dx+dy*dy+dz*dz); } //输出总距离,保留3位小数 cout<<fixed<<setprecision(3)<<s<<endl; return 0; }
- 1
信息
- ID
- 2482
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者