結果
| 問題 |
No.14 最小公倍数ソート
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-09-08 10:19:27 |
| 言語 | Crystal (1.14.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 838 bytes |
| コンパイル時間 | 13,023 ms |
| コンパイル使用メモリ | 311,172 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-09-08 10:19:44 |
| 合計ジャッジ時間 | 14,377 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 20 |
ソースコード
M = 10000
n = gets.not_nil!.to_i
a = Array.new(n) { |i| gets.not_nil!.to_i }
cnt = Array.new(M + 1, 0)
(1...n).each { |i| cnt[a[i]] += 1 }
divs = Array(Array(Int32)).new(M + 1) { [1] }
(2..M).each do |i|
(i..M).step(i) do |j|
divs[j] << i
end
end
(1..M).each { |i| divs[i].reverse! }
s = Array(Set(Int32)).new(M + 1) { Set(Int32).new }
(1..M).each do |i|
if cnt[i] != 0
divs[i].each { |d| s[d].add(i) }
end
end
now = a[0]
print "#{now} "
until s[1].empty?
lcm = 1_000_000_000
t = 1_000_000_000
divs[now].each do |d|
next if s[d].empty?
v = s[d].first
candidate = v * now // d
if lcm >= candidate
lcm = candidate
t = Math.min(t, v)
end
end
break if t == 1_000_000_000
now = t
cnt[t].times { print "#{t} " }
cnt[t] = 0
divs[t].each { |d| s[d].delete(t) }
end
puts
vjudge1