幅優先探索ドリルのサムネイル
(問題 40)REVERSE 3 Bash(Beta)編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

素数 P を 500069 とします。P 未満の正整数 X に対して rev(X) を X を leading 0 をつけ 6 桁に揃えた後、文字列としてリバースした数字とします。

例えば、rev(20007) = 700020、rev(103568) = 865301 です。f(X, Z) を以下のように定めます。

  • 「現在の数字を A としたときに、A が 0 でなければ A + A, A + rev(A) (計算は mod P 上で行う)のいずれかに置き換える」というのを操作とする。X から Z に操作を繰り返してするとき、操作回数の最小値。


  • 整数 X, Z が与えられます。f(X, Z) 回操作を行い X を Z にしてください。

    なお、今回の問題は制約により、必ず X を Z にすることが出来ることが保証されています。

    入力される値

    X Z


    1 行目には 2 つの整数 X, Z が与えられます。

    入力は合計で 1 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


    入力値最終行の末尾に改行が1つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

    答えを f(X, Z) + 2 行で出力してください。

    1 行目には f(X, Z) を出力してください。

    2 + i (0 ≦ i ≦ f(X, Z)) 行目には X から i 回操作を行った後の数字を出力してください。

    以下の条件を全て満たす必要があります。複数答えがある場合にはどれを出力しても正解となります。

  • 1 行目に出力する整数は f(X, Z) である。


  • 2 行目に出力した数字は X、f(X, Z) + 2 行目に出力した数字は Z である。


  • i (2 ≦ i ≦ f(X, Z) + 1) 行目に出力した数字から 1 回操作を行うことで、i + 1 行目に出力した数字にすることが出来る。
  • 条件

    すべてのテストケースにおいて、以下の条件をみたします。

  • 1 ≦ X, Z < P
  • 入力例1

    273112 467625

    出力例1

    3
    273112
    484484
    468899
    467625

    入力例2

    77777 77777

    出力例2

    0
    77777

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. 幅優先探索ドリル(言語選択)
    4. 問題一覧 Bash(Beta)編
    5. (問題 40)REVERSE 3 Bash(Beta)編
    ページの先頭へ戻る