题解 | 便便传送门(一)-牛客假日团队赛1B题

登录—专业IT笔试面试备考平台_牛客网

https://ac.nowcoder.com/acm/contest/918/B

题目描述

Farmer John最讨厌的农活是运输牛粪。为了精简这个过程,他制造了一个伟大的发明:便便传送门!与使用拖拉机拖着装满牛粪的大车从一个地点到另一个地点相比,他可以使用便便传送门将牛粪从一个地点瞬间传送到另一个地点。

Farmer John的农场沿着一条长直道路而建,所以他农场上的每个地点都可以简单地用该地点在道路上的位置来表示(相当于数轴上的一个点)。一个传送门可以用两个数x和y表示,被拖到地点x的牛粪可以瞬间传送到地点y,反之亦然。

Farmer John想要将牛粪从地点a运输到地点b,他建造了一个可能对这一过程有所帮助的传送门(当然,如果没有帮助,他也可以不用)。请帮助他求出他需要使用拖拉机运输牛粪的总距离的最小值。

输入描述:

输入仅包含一行,为四个用空格分隔的整数:a和b,表示起始地点和结束地点,后面是x和y,表示传送门。所有的位置都是范围为0…100的整数,不一定各不相同。

输出描述:

输出一个整数,为Farmer John需要用拖拉机运输牛粪的最小距离。

示例1

输入
3 10 8 2
输出
说明
在这个样例中,最佳策略是将牛粪从位置3运到位置2,传送到位置8,再运到位置10。 所以需要用拖拉机的总距离为1 + 2 = 3。

解答

这里的传送门可以双向传送,但是我们最多使用一次传送门就够了(显而易见读者自证)

我们要分三种情况讨论

一,不使用传送门

答案为两点的直线距离|a−b|

二,使用传送门从左边到右边

答案为起点到左侧传送门的直线距离加上右侧传送门到终点的直线距离

三,使用传送门从右边到左边

与二同理

最后输出三种情况的最小值即可

#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int main() { int maxn=99999999; int a,b,x,y; scanf("%d%d%d%d",&a,&b,&x,&y);
    maxn=min(abs(x-a)+abs(y-b),min(abs(x-b)+abs(y-a),abs(b-a))); printf("%d",maxn); return 0;
} 

来源:千柒/Kan_kiz





全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务