🤍
ABC-013B「錠」 解説
皆さん、こんにちは!
今回はABC-013のB問題「錠」について解説していきたいと思います!
目次
- 問題概要
- 制約
- 入力形式
- 解説
問題概要
ダイヤルロック式の錠がある。
この錠の赤いボタンを押すと、ディスプレイに表示されている数が
ただし、ディスプレイの表示が
現在ディスプレイに表示されている数字は
錠を開けるために最低でボタンを何回押せばいいか求めよ。
制約
入力形式
a b
解説
少し複雑な条件に思えてしまいますが、一旦シンプルな例で考えてみましょう。
例1
-
の場合a = 4, b = 6
入力例1のパターンですね!
赤いボタンを 回押せばよいだけなので、答えは2 となります。2
例2
-
の場合a = 6, b = 4
これは入力例2です。
a,bの差が なので、青いボタンを2 回押せば2 となり錠が開きます。a=b
例3
-
の場合a = 8, b = 1
この場合はどうでしょう?
先ほどの つの例と同じように考えると、ボタンを2 回押して7 とすればいいように思えます。a=b
しかし問題文をよく読むと、「ディスプレイの表示が のときに赤いボタンを押すと9 になり、ディスプレイの表示が0 のときに青いボタンを押すと0 になる。」とあります。9
この条件を考慮に入れると、赤いボタンを 回押すと3 となることがわかりますa=b -
8→9→0→1 (3回)
結論
上述のとおり、出力すべき数字は
-
の差aとb -
にmin(a,b) を足したものから10 を引いたものmax(a,b)
のうち小さいほうであることがわかります。
それを実装すると下記のようになります。
013-B.cpp
#include <iostream>
using namespace std;
int main(void){
int a;
int b;
cin>>a;
cin>>b;
int ans;
ans = min(abs(a-b), abs(min(a,b)+10-max(a,b)));
cout<<ans<<endl;
}
実際に提出したコードはこちらです。
Discussion