結果
| 問題 |
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