結果

問題 No.433 ICPC国内予選の選抜ルールがこんな感じだったらうれしい
ユーザー harhogefooharhogefoo
提出日時 2016-10-14 23:36:07
言語 Ruby
(3.3.0)
結果
TLE  
実行時間 -
コード長 2,076 bytes
コンパイル時間 478 ms
コンパイル使用メモリ 7,424 KB
実行使用メモリ 91,824 KB
最終ジャッジ日時 2024-11-22 06:33:45
合計ジャッジ時間 200,802 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 TLE -
testcase_02 TLE -
testcase_03 TLE -
testcase_04 TLE -
testcase_05 TLE -
testcase_06 TLE -
testcase_07 TLE -
testcase_08 TLE -
testcase_09 TLE -
testcase_10 TLE -
testcase_11 TLE -
testcase_12 TLE -
testcase_13 TLE -
testcase_14 TLE -
testcase_15 TLE -
testcase_16 TLE -
testcase_17 TLE -
testcase_18 TLE -
testcase_19 TLE -
testcase_20 TLE -
testcase_21 TLE -
testcase_22 TLE -
testcase_23 TLE -
testcase_24 TLE -
testcase_25 TLE -
testcase_26 TLE -
testcase_27 TLE -
testcase_28 TLE -
testcase_29 TLE -
testcase_30 AC 92 ms
17,408 KB
testcase_31 AC 89 ms
50,708 KB
testcase_32 TLE -
testcase_33 TLE -
testcase_34 TLE -
testcase_35 AC 90 ms
17,280 KB
testcase_36 AC 90 ms
26,368 KB
testcase_37 WA -
testcase_38 WA -
testcase_39 WA -
testcase_40 WA -
testcase_41 WA -
testcase_42 TLE -
testcase_43 TLE -
testcase_44 AC 3,347 ms
13,824 KB
testcase_45 WA -
testcase_46 TLE -
testcase_47 TLE -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

n, k = gets.chomp.split(" ").map(&:to_i)

h_solve = Hash.new(0)
h_penalty = Hash.new(0)
h_univ = Hash.new(0)
h_passed_univ = Hash.new(0)

passed = Array.new

n.times do |i|
  solve, penalty, univ = gets.chomp.split(" ").map(&:to_i)
  h_solve[i] = solve
  h_penalty[i] = penalty
  h_univ[i] = univ
  h_passed_univ[univ] = 0
end


k.times do
  # 最も多く解いたチームを抽出
  solve_max = h_solve.max { |a, b| a[1] <=> b[1] }
  # puts "最大値#{solve_max}"
  best_solve = h_solve.select { |key, v| v ==  solve_max[1] }
  # puts "最大値のチーム: #{best_solve}"
  # puts "通過した大学: #{h_passed_univ}"

  if best_solve.length == 1
    num = best_solve.to_a[0][0]
    passed.push(num)
    h_passed_univ[h_univ[num]] += 1
    h_solve.delete(num)
    h_penalty.delete(num)
    h_univ.delete(num)
    next
  else
    # 今までに選抜された同じ大学のチーム数が少ない
    team = -1
    passed_team_num = -1
    is_same_num = false
    best_solve.each do |k, v|
      # puts "通過した大学: #{h_passed_univ[h_univ[k]]}"
      if passed_team_num == -1
        passed_team_num = h_passed_univ[h_univ[k]]
        team = k
      else
        if h_passed_univ[h_univ[k]] < passed_team_num
          passed_team_num = h_passed_univ[h_univ[k]]
          team = k
          is_same_num = false
        elsif h_passed_univ[h_univ[k]] == passed_team_num
          is_same_num = true
        end
      end
    end

    if !is_same_num and team != -1
      passed.push(team)
      h_passed_univ[h_univ[team]] += 1
      h_solve.delete(team)
      h_penalty.delete(team)
      h_univ.delete(team)
      next
    else
      team = -1
      p = -1
      best_solve.each do |k, v|
        if p == -1
          p = h_penalty[k]
          team = k
        else
          if h_penalty[k] < p
            p = h_penalty[k]
            team = k
          end
        end
      end
      passed.push(team)
      h_passed_univ[h_univ[team]] += 1
      h_solve.delete(team)
      h_penalty.delete(team)
      h_univ.delete(team)
    end
  end
end

puts passed
0