AtCoder题解 —— AtCoder Regular Contest 109 —— A - Hands

该博客详细解析了AtCoder Regular Contest 109 A题的解决方案,介绍了如何找到从A楼a层到B楼b层的最短时间路径。通过分析题目中的走廊和楼梯机制,得出最佳路径策略,并提供了AC代码实现,明确了时间复杂度和空间复杂度为O(1)。
摘要由CSDN通过智能技术生成

题目相关

题目链接

AtCoder Regular Contest 109 A 题,https://atcoder.jp/contests/arc109/tasks/arc109_a

Problem Statement

There are two 100-story buildings, called A and B. (In this problem, the ground floor is called the first floor.)

For each i=1,…,100 the i-th floor of A and that of B are connected by a corridor. Also, for each i=1,…,99, there is a corridor that connects the (i+1)-th floor of A and the i-th floor of B. You can traverse each of those corridors in both directions, and it takes you x minutes to get to the other end.

Additionally, both of the buildings have staircases. For each i=1,…,99, a staircase connects the i-th and (i+1)-th floors of a building, and you need yy minutes to get to an adjacent floor by taking the stairs.

Find the minimum time needed to reach the b-th floor of B from the a-th floor of A.

Input

Input is given from Standard Input in the following format:

a b x y

Output

Print the minimum time needed to reach the b-th floor of B from the a-th floor of A.

Samples1

Sample Input 1

2 1 1 5

Sample Output 1

1

Explaination

There is a corridor that directly connects the 2-nd floor of A and the 1-st floor of B, so you can travel between them in 1 minute. This is the fastest way to get there, since taking the stairs just once costs you 5 minutes.

Samples2

Sample Input 2

1 2 100 1

Sample Output 2

101

Explaination

For example, if you take the stairs to get to the 2-nd floor of A and then use the corridor to reach the 2-nd floor of B, you can get there in 1+100=101 minutes.

Samples3

Sample Input 3

1 100 1 100

Sample Output 3

199

Explaination

Using just corridors to travel is the fastest way to get there.

Constraints

  • 1≤a,b,x,y≤100
  • All values in input are integers.

题解报告

题目翻译

有两幢 100 层的大楼 A 和 B,本问题中,底楼称为 1 楼。在 A 和 B 的每一层之间都有通道连接,同时 A 的第 i+1 层和 B 的第 i 层有双向通道连接,需要发费 x 时间。同时大楼内部还有楼梯连接,从第 i+1 楼到第 i 楼需要发费 y 时间。

求从 B 的 b 层到 A 的 a 层需要使用的最少时间。

题目分析

又是一个友善的打卡数学题。

如上图所示,绿色表示大楼 A 和 B 之间的走廊,粉红表示大楼内部的楼梯。本题由于 x 和 y 是固定的,因此不会存在中间更换楼梯和通道的选择。注意通道是 A 的第 i+1 层到 B 的第 i 层这个小细节。我们可以发现两个细节

细节一

我们要从大楼 B 的第 3 层和大楼 B 的第 2 层,我们有两个选择:方案一从大楼 B 第 3 层走走廊到大楼 A 第 2 层,再从走廊走到大楼 B 的第 2 层,这样使用了 2x 时间;方案二从使用楼梯,大楼 B 第 3 层走走廊到大楼 B 第 2 层,这样使用了 y 的时间。因此对我们来说,选择最小的。也就是 min(y, 2x)。如下图所示。

细节二

要从大楼 B 到 大楼 A。至少需要走一次走廊。

AC 参考代码

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int a,b,x,y;
    cin >> a >> b >> x >> y;
	if(a > b) {
        cout << min(y,2*x)*max(0,abs(a-b)-1)+x;
    } else {
        cout << min(y,2*x)*max(0,abs(a-b))+x;
    }
    cout<<"\n";
    return 0;
}

时间复杂度

O(1)。

空间复杂度

O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值