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 }