(問題 40)REVERSE 3 CoffeeScript(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
-
3
273112
484484
468899
467625
問題一覧へ戻る