幅優先探索ドリルのサムネイル
(問題 36)SWAP 2 D(Beta)編(paizaランク S 相当)

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

問題

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

1,2,3,4,5,6,7,8,9 をそれぞれ 1 文字ずつ含む S に対して f(S) を以下のように定めます。

  • 「隣り合う 2 つの数字を入れ替える」という行為を操作と呼ぶ。入れ替えた数字に L_1 もしくは L_2 が含まれる場合はコスト 0、そうでない場合はコスト 1 とします。123456789 から操作を繰り返して S にするとき、コストの最小値


  • 例えば L_1 = 5, L_2 = 9 のとき f(123564789) は 123456789 → 123546789 → 123564789 と操作することで 123564789 にすることができコスト 1 未満で 123564789 にする方法がないので、1 となります。

    整数 X, L_1, L_2 が与えられるので、f(S) = X となる S を昇順で全て求めてください。

    入力される値

    X L_1 L_2


    1 行目には 3 つの整数 X, L_1, L_2 が与えられます。

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


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

    答えの数を A としたとき答えを A + 1 行で出力してください。

    1 行目には整数 A を出力してください。

    1 + i (1 ≦ i ≦ A) 行目には f(S) = X となる S を昇順に並び替えた時に i 番目に来る S を出力してください。

    条件

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

  • 0 ≦ X ≦ 36

  • 1 ≦ L_1, L_2 ≦ 9
  • 入力例1

    0 7 7

    出力例1

    9
    123456789
    123456879
    123456897
    123457689
    123475689
    123745689
    127345689
    172345689
    712345689

    入力例2

    36 1 9

    出力例2

    0

    問題一覧へ戻る

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