結果
| 問題 | No.9 モンスターのレベル上げ |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-28 00:05:02 |
| 言語 | Ruby (3.4.1) |
| 結果 |
RE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,959 bytes |
| コンパイル時間 | 101 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 40,684 KB |
| 最終ジャッジ日時 | 2024-06-23 22:18:49 |
| 合計ジャッジ時間 | 7,122 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 RE * 16 |
コンパイルメッセージ
Syntax OK
ソースコード
# start_time = Time.now
n = gets.to_i
n0 = 11
n1 = 2 ** n0
org_mon_list = [0]
gets.split.each do |level|
point = level.to_i << n0
i = org_mon_list.size
org_mon_list << point
while i > 1
j = i / 2
parent = org_mon_list[j]
if point < parent
org_mon_list[i] = parent
org_mon_list[j] = point
i = j
else
break
end
end
end
org_mon_list << ((10001 + 5000 * n) << n0)
exp_list = gets.split.map{|s|s.to_i / 2}
# low_count = 1500
counts = []
pids = {}
max_procs = 4
n.times do |i|
if pids.size >= max_procs
pid = Process.wait
counts << pids[pid].gets.to_i
pids[pid].close
pids.delete(pid)
end
read, write = IO.pipe
pid = fork do
read.close
mon_list = org_mon_list.clone
max_count = 0
n.times do |j|
exp = exp_list[(i + j) % n]
target = mon_list[1] + (exp << n0) + 1
count = target % n1
max_count = count if count > max_count
k = 1
mon_list[1] = target
while (k0 = 2 * k) <= n
k1 = k0 + 1
k0_mon = mon_list[k0]
k1_mon = mon_list[k1]
if k0_mon < target
if k1_mon < target
if k0_mon < k1_mon
mon_list[k] = k0_mon
mon_list[k0] = target
k = k0
else
mon_list[k] = k1_mon
mon_list[k1] = target
k = k1
end
else
mon_list[k] = k0_mon
mon_list[k0] = target
k = k0
end
elsif k1_mon < target
mon_list[k] = k1_mon
mon_list[k1] = target
k = k1
else
break
end
end
end
write.puts(max_count)
write.close
exit!(0)
end
if pids.key?(pid)
counts << pids[pid].gets.to_i
pids[pid].close
else
pids[pid] = read
end
end
Process.waitall.each do |pst|
counts << pids[pst[0]].gets.to_i
end
puts counts.min
# puts (Time.now - start_time)