码迷,mamicode.com
首页 > 其他好文 > 详细

P5143 攀爬者(一道水题的反思)

时间:2020-04-02 09:12:45      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:hid   cst   can   stream   base   min   一起   ups   爬山   

都怪我太粗心了,从第一个结构体录入数据,排序的时候,sort函数却忘记改,这要是比赛上唉!

 

 

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

题目描述

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

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

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

(3) HKE会飞,他从一个点Pi爬到Pj的距离为两个点的欧几里得距离。即,\sqrt{(X_i-X_j)^2+(Y_i-Y_j)^2+(Z_i-Z_j)^2}(Xi?Xj?)2+(Yi?Yj?)2+(Zi?Zj?)2?

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

输入格式

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

接下来N行,三个整数x_i,y_i,z_ixi?,yi?,zi?表示第ii个点的坐标。

输出格式

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

 

AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <math.h>
using namespace std;

typedef struct
{
double x = 0;
double y = 0;
double z = 0;
} Point;

bool cmp(Point A, Point B)
{
return A.z < B.z;
}

int main()
{
Point P[50005];
int N;
cin >> N;
for (int i = 1; i <= N; i++)
{
// scanf("%d%d%d", &P[i].x, &P[i].y, &P[i].z);
cin>>P[i].x>>P[i].y>>P[i].z;
}
sort(P+1, P + N+1, cmp);//在这里一定要把1给他加上,前面的都改了后面的不改就是作死!
//cout << "let‘s start!</>" << endl;
double ans = 0;
for (int i = 1; i < N; i++)
{
//cout << P[i].x << " " << P[i].y << " " << P[i].z << endl;
ans += sqrt((P[i + 1].x - P[i].x) * (P[i + 1].x - P[i].x) + (P[i + 1].y - P[i].y) * (P[i + 1].y - P[i].y) + (P[i + 1].z - P[i].z) * (P[i + 1].z - P[i].z));
}
//cout << ans << endl;
printf("%.3f\n", ans);
return 0;
}

P5143 攀爬者(一道水题的反思)

标签:hid   cst   can   stream   base   min   一起   ups   爬山   

原文地址:https://www.cnblogs.com/leader-one/p/12617139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!