0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ABC-013B「錠」 解説

Last updated at Posted at 2023-10-27

皆さん、こんにちは!
今回はABC-013のB問題「錠」について解説していきたいと思います!
https://atcoder.jp/contests/abc013/tasks/abc013_2)

目次

  • 問題概要
  • 制約
  • 入力形式
  • 解説

問題概要

ダイヤルロック式の錠がある。
この錠の赤いボタンを押すと、ディスプレイに表示されている数が$1$増え、青いボタンを押すと$1$減る。
ただし、ディスプレイの表示が$9$のときに赤いボタンを押すと$0$になり、ディスプレイの表示が$0$のときに青いボタンを押すと$9$になる。
現在ディスプレイに表示されている数字は$a$で、この数字が$b$になると錠が空く。

錠を開けるために最低でボタンを何回押せばいいか求めよ。
ABC013-B

制約

$0 \leq a,b \leq 9$ ($N$は整数)

入力形式

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;
}

提出コード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?