# Read n n = gets.not_nil!.to_i # Read array a (space-separated) a = gets.not_nil!.split.map(&.to_i) # Read array b (space-separated) b = gets.not_nil!.split.map(&.to_i) temp = a.map { |val| {val, 0} } ans = Int32::MAX n.times do |i| # Use an array and sort it manually to simulate min-heap behavior arr = temp.dup arr.sort_by! { |(val, count)| val } ma = 0 n.times do |j| # Get the smallest element (first element after sorting) element = arr.shift t, u = element # Add the modified element back and maintain sorted order new_val = t + b[(i + j) % n] // 2 new_pair = {new_val, u + 1} # Insert in sorted position index = arr.bsearch_index { |(val, _)| val >= new_val } || arr.size arr.insert(index, new_pair) ma = Math.max(ma, u + 1) end ans = Math.min(ans, ma) end puts ans