結果
問題 | No.1708 Quality of Contest |
ユーザー | 小野寺健 |
提出日時 | 2021-10-30 16:21:44 |
言語 | Ruby (3.4.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,403 bytes |
コンパイル時間 | 138 ms |
コンパイル使用メモリ | 7,552 KB |
実行使用メモリ | 67,492 KB |
最終ジャッジ日時 | 2024-10-07 13:46:04 |
合計ジャッジ時間 | 7,024 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 7 TLE * 1 |
コンパイルメッセージ
Main.rb:30: warning: mismatched indentations at 'end' with 'else' at 28 Main.rb:115: warning: assigned but unused variable - k Syntax OK
ソースコード
class PriorityQueuedef initialize(array = [])@data = []array.each{|a| push(a)}enddef push(element)@data.push(element)bottom_upenddef popif size == 0return nilelsif size == 1return @data.popelsemin = @data[0]@data[0] = @data.poptop_downreturn minendenddef pollif size == 0return nilelsereturn @data[0]endenddef size@data.sizeenddef data@dataendprivatedef swap(i, j)@data[i], @data[j] = @data[j], @data[i]enddef parent_idx(target_idx)(target_idx - (target_idx.even? ? 2 : 1)) / 2enddef bottom_uptarget_idx = size - 1return if target_idx == 0parent_idx = parent_idx(target_idx)while (@data[parent_idx][0] < @data[target_idx][0])swap(parent_idx, target_idx)target_idx = parent_idxbreak if target_idx == 0parent_idx = parent_idx(target_idx)endenddef top_downtarget_idx = 0# child がある場合while (has_child?(target_idx))a = left_child_idx(target_idx)b = right_child_idx(target_idx)if @data[b].nil?c = aelsec = @data[a][0] >= @data[b][0] ? a : bendif @data[target_idx][0] < @data[c][0]swap(target_idx, c)target_idx = celsereturnendendend# @param Integer# @return Integerdef left_child_idx(idx)(idx * 2) + 1end# @param Integer# @return Integerdef right_child_idx(idx)(idx * 2) + 2end# @param Integer# @return Boolentdef has_child?(idx)((idx * 2) + 1) < @data.sizeendendN, M, X = gets.split(" ").map{|s| s.to_i}A = Array.new(M) {PriorityQueue.new}N.times {a, b = gets.split(" ").map{|s| s.to_i}A[b-1].push([a,b])}k = gets.to_ic = gets.split(" ").map{|s| s.to_i}same = PriorityQueue.newdiff = PriorityQueue.new0.upto(M-1) {|j|diff.push(A[j].pop) if A[j].size > 0}cnt = [0]c.max.times {sa, sb = same.size > 0 ? same.poll : [-Float::INFINITY, -1]da, db = diff.size > 0 ? diff.poll : [-Float::INFINITY, -1]if sa > da + X thensame.popns = A[sb-1].popsame.push(ns) if nscnt << sa + cnt[-1]elsediff.popns = A[db-1].popsame.push(ns) if nscnt << da + X + cnt[-1]end}total = 0c.each {|i|total += cnt[i]}puts total