(問題 36)SWAP 2 Go編(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
-
9
123456789
123456879
123456897
123457689
123475689
123745689
127345689
172345689
712345689
問題一覧へ戻る