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

都怪我太粗心了,从第一个结构体录入数据,排序的时候,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;
}

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

时间: 2024-10-27 07:44:22

P5143 攀爬者(一道水题的反思)的相关文章

碰到日期题就怕的我来写一道水题吧

HDOJ-2005, http://acm.hdu.edu.cn/showproblem.php?pid=2005 20XX系列的水题哈哈,写了二十分钟,就为找到一种比较正常不傻逼的写法... 嗯,学习了一下,闰年的判断可以写成一个接受参数的宏. #define lev(n) (n%4==0&&(n%100!=0||n%400==0)) 然后建立一个二维数组来存储闰年和非闰年的每月天数. int calendar[2][13] = { {0,31,28,31,30,31,30,31,31,

POJ 2028 When Can We Meet? (又是一道水题)

[题目简述]:N代表有几个会员,Q代表有几个会员的时候开会才算做有效,接下来N行,每行第一个数字代表这行有M个数,说明这个会员在哪几天有时间.最后让我们求出  最快  哪天开会. [分析]:简单题,见代码. // 248K 47Ms #include<iostream> using namespace std; int M[101]; int N,Q; int main() { int m; int m1; while(1) { cin>>N>>Q; if(N == 0

POJ 2501 Average Speed(不错的一道水题)

[题目简述]:给出我们时间和速度,让我们求出走了多远的距离 [分析]:这道题开始的时候没有太明白什么时候输出,后来看了别人的题解就明白了. 关于此题的几点总结: 1.时间的输入方法:scanf("%d:%d:%d",&h,&m,&s),注意积累! 2.关于空格的的输入控制使用char ch = getchar(),同时它还作为了本题的一个是否输出的标识控制的条件. 3.多积累类似题目的方法. 代码参考http://blog.csdn.net/yujuan_mao

2018焦作网络赛 - Poor God Water 一道水题的教训

本题算是签到题,但由于赛中花费了过多的时间去滴吧格,造成了不必要的浪费以及智商掉线,所以有必要记录一下 题意:方格从1到n,每一格mjl可以选择吃鱼/巧克力/鸡腿,求走到n格时满足 1.每三格不可重复同一种食物 2.每三格均不同食物时中间格子不可吃巧克力 3.每三格前后两格不可同时吃巧克力 以上三个条件的方案数,n<1e10 太长不看版:打表+快速幂AC 长篇吐槽版 很显然的,设\(dp[n][i][j][k]\),走到第\(n\)格时第\(n-2\)格的食物是\(i\),第\(n-1\)的食物

一道水题。。时间复杂度有问题

UPC OJ 一道水题 STL

Problem C: 字符串游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 10  Solved: 3 [Submit][Status][Web Board] Description 说到游戏,大家还是比较喜欢的,但是玩游戏,如果想赢得对方还是得靠思维的,xy比较喜欢字符串,尤其是起始字母等于终止字母这样的字符串(the string's length must exceed one),但是呢,xy有个癖好,喜欢把每个字符重新分配一个值,喜欢

POJ 2726 Holiday Hotel 一道水题

貌似是当年楼教主出的题目. 有N个旅店,两个属性,距离D,价格C.选择旅店,若选择M 1.比M近的,价格比它高 2.比M便宜的,距离比它远 求有多少个这样的旅店 ① 暴力做法 两次排序,按照不同的关键字.然后扫描,过程中记录下前面另一个关键字的最小值,然后比较.若数组中sel为2则是. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<alg

一道字符串水题LSS(ACdream)

一道水题但是我错了好惨 罚时罚到最后一名 Problem Description Time flies, four years passed, colleage is over. When I am about to leave, a xuemei ask me an ACM  problem, but I can't solve it, I am 功力尽失.  Please help me so that I won't lose face in front of xuemei! Give y

一道cf水题再加两道紫薯题的感悟

1. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. 2. 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整除.或者把分子上的每个数进行素数因子分解,分母上的数也进行素数因子分解,若分子上的与分母上相同素数因子进行比较,分子上的素数因子指数大于分母位置上的,则证明可整除. 3. 遇到乘法的时候注意越界问题. 4. 遇到求某一个区间内,满足某一特征的数的个数,而这个特征与因子,约数有关,尝试用埃筛的方法