結果

問題 No.282 おもりと天秤(2)
ユーザー simansiman
提出日時 2022-01-13 04:51:06
言語 Ruby
(3.3.0)
結果
RE  
実行時間 -
コード長 1,281 bytes
コンパイル時間 349 ms
コンパイル使用メモリ 7,552 KB
実行使用メモリ 31,584 KB
平均クエリ数 1.96
最終ジャッジ日時 2024-11-16 00:03:21
合計ジャッジ時間 8,233 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 116 ms
28,632 KB
testcase_01 RE -
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 RE -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 RE -
testcase_21 RE -
testcase_22 RE -
testcase_23 AC 113 ms
28,640 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

N = gets.to_i
omori = [*1..N]
R = Array.new(N + 1) { Array.new(N + 1, 0) }

def merge_sort(l, r, arr, stack)
  return [arr[l]] if r - l == 0
  return [] if r - l < 0
 
  mid = (l + r) / 2
  que_a = merge_sort(l, mid, arr, stack)
  que_b = merge_sort(mid + 1, r, arr, stack)
  ret = []
 
  while !que_a.empty? || !que_b.empty?
    if que_a.empty?
      ret << que_b.shift
    elsif que_b.empty?
      ret << que_a.shift
    elsif R[que_a.first][que_b.first] == -1
      ret << que_a.shift
    elsif R[que_b.first][que_a.first] == -1
      ret << que_b.shift
    else
      stack << [que_a.first, que_b.first]
      ret << que_a.shift
    end
  end
 
  ret
end

def send_query(stack)
  query = Array.new(2 * N, 0)

  stack.each_with_index do |(i, j), idx|
    break if idx >= N

    query[2 * idx] = i
    query[2 * idx + 1] = j
  end

  STDOUT.puts("? #{query.join(' ')}")
  STDOUT.flush

  res = gets.chomp.split

  res.each_with_index do |r, idx|
    i, j = stack[idx]
    break if i.nil?

    if r == '<'
      R[i][j] = -1
      R[j][i] = 1
    else
      R[i][j] = 1
      R[j][i] = -1
    end
  end
end

loop do
  stack = []
  merge_sort(0, N - 1, omori, stack)

  break if stack.empty?
  send_query(stack)
end

ans = merge_sort(0, N - 1, omori, [])
puts "! #{ans.join(' ')}"
0