算法
(排序) $O(n\log n)$
由于攀爬者是从低到高攀爬的,所以需要对数组按高度进行排序,然后把数组中的所有点代入距离公式计算出相邻两点的距离并将它们累加即可。
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::vector;
using std::tuple;
using std::tie;
int main() {
int n;
cin >> n;
vector<tuple<int, int, int>> a(n);
for (int i = 0; i < n; ++i) {
int x, y, z;
cin >> x >> y >> z;
a[i] = tie(z, x, y);
}
sort(a.begin(), a.end());
double ans = 0;
for (int i = 0; i < n - 1; ++i) {
int x1, y1, z1;
tie(z1, x1, y1) = a[i];
int x2, y2, z2;
tie(z2, x2, y2) = a[i + 1];
ans += sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
}
printf("%.3lf\n", ans);
return 0;
}