P5143 攀爬者

  解释一下题意:HKE爬山,给你几个点的坐标,爬山时必须全部经过给出的点。山是立体的,所以给出的点是对应在立体直角坐标系中的,有x,y,z;所以直接for循环全部循环一遍,每次计算距离,边走边加。不过不要忘了排序,因为HKE经过的每一个点高度 z 都比上一个点高,所以就要对 z 从小到大进行排序。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>//sort排序头文件
 4 #include<cmath>
 5 using namespace std;
 6 struct zkw{
 7     int x;
 8     int y;
 9     int z;
10 };
11 zkw a[50010];
12 int cmp(zkw a,zkw b) { return a.z<b.z; }//排序参数
13 double ans=0;//ans记录答案
14 int main()
15 {
16     int n;
17     cin>>n;
18     for(int i=1;i<=n;++i)
19     {
20         cin>>a[i].x>>a[i].y>>a[i].z;
21     }
22     sort(a+1,a+n+1,cmp);//进行排序
23     for(int i=2;i<=n;++i)
24     {
25         ans+=sqrt(pow((a[i-1].x-a[i].x),2)+pow((a[i-1].y-a[i].y),2)+pow((a[i-1].z-a[i].z),2));
//按照题目中的公式计算距离并加在ans中
26 } 27 printf("%.3lf",ans); 28 return 0; 29 }
原文地址:https://www.cnblogs.com/zkw666/p/13055285.html