猿でもわかる[AtCoder Regular Contest 109 A問題 解説]
- 満月
- 2020年11月29日
- 読了時間: 1分
今回は下の問題の解説をしようと思います。
<満月の解説 ~Python~>
場合分けして考えてみましょう
1.aとbが等しい
Aのa階からBのa階の廊下を使うだけで良いので、出力はx。
2.a>b
下図の2つのルートより時間が短いルートは存在しません(ぜひ探してみてください)。では、それぞれのルートにかかる時間を計算しましょう。ここでは簡単にするため、aとbの高さの差が3階しかありませんが、本当はもっと差がある場合もあります。

ルート1......x+(a-b-1)*y
ルート2......(2*(a-b)-1)*x
この二つのルートの最短のルートを求めればいいわけですから、
min((2*(a-b)-1)*x,x+(a-b-1)*y)
で求められます。
3.a<b
下図の2つのルートより時間が短いルートは存在しません(ぜひ探してみてください)。では、それぞれのルートにかかる時間を計算しましょう。

ルート1......x+(b-a)*y
ルート2......2*(b-a)+1)*x
この二つのルートの最短のルートを求めればいいわけですから、
min(x+(b-a)*y,2*(b-a)+1)*x)
で求められます。
よってPythonでのコードは
n = list(map(int,input().split()))
a = n[0]
b = n[1]
x = n[2]
y = n[3]
if b == a:
print(x)
elif a > b:
print(min((2*(a-b)-1)*x,x+(a-b-1)*y))
else:
print(min(x+(b-a)*y,(2*(b-a)+1)*x))
となります。
参考文献
https://oekaki.natureblue.com
Comments