結果
問題 |
No.205 マージして辞書順最小
|
ユーザー |
|
提出日時 | 2016-02-03 09:33:19 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 1,212 ms / 5,000 ms |
コード長 | 1,856 bytes |
コンパイル時間 | 124 ms |
コンパイル使用メモリ | 7,552 KB |
実行使用メモリ | 14,336 KB |
最終ジャッジ日時 | 2024-09-21 20:07:24 |
合計ジャッジ時間 | 5,530 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 15 |
コンパイルメッセージ
Syntax OK
ソースコード
def push_char_index(chrs, indexes, depth = 0) # 最小の文字を調べる minchar = "{" indexes.each do |index| if chrs[index].length > depth && chrs[index][depth] < minchar minchar = chrs[index][depth] end end # 最小の文字の位置を調べる minchar_indexes = [] indexes.each do |index| if chrs[index].length > depth && chrs[index][depth] == minchar minchar_indexes << index end end # 最小の文字が1つしかないならその文字のindexを返す # 2つ以上ある場合で、次の文字があるならばその文字で調べる # indexes内のすべてのindexについて次の文字が存在しない場合、indexes[0]を返す if minchar_indexes.length == 1 return minchar_indexes[0] elsif minchar_indexes.length == 0 return indexes[0] else return push_char_index(chrs, minchar_indexes, depth + 1) end end def any_char_is(chrs, j_char) chrs.each do |char| return false if char[0] != j_char end return true end # トップレベルの開始 input_count = gets.to_i # strs配列に文字列を格納 strs = [] input_count.times do strs << gets.chomp! end # 文字列を分割した配列を配列chrsに格納 chrs = [] strs.each do |str| chrs << str.split("") end # メソッドに渡すindexes配列の作成 ([0, 1, 2, ... ]) indexes = (0...chrs.length).collect{ |i| i} sort = "" # chrsが空になるまで until any_char_is(chrs, "~") do # 追加すべき文字のインデックスを取得 index = push_char_index(chrs, indexes) # 出力文字列sortに、追加すべき文字を挿入 sort.concat(chrs[index][0]) # 追加した文字をchrs[index]から削除 chrs[index].shift # chrs[index]が空になったら番兵として~を追加 if chrs[index].length == 0 chrs[index] << "~" end end puts sort