# AtCoder Beginner Contest 112

URL: https://atcoder.jp/contests/abc112 (opens new window)

# C

n = gets.chomp.to_i
# 全部高度が0となることは無いはず
arr = n.times.map{gets.chomp.split.map(&:to_i)}.sort_by{|x, y, h| -h}

0.upto(100) do |cx|
  0.upto(100) do |cy|
    # 中心座標をcx, cyと仮定するとその時の中心の高さを仮定することができる
    x, y, max_h = arr[0]
    h = max_h + (x - cx).abs + (y - cy).abs
    # 他の座標で矛盾が無いことを示す
    flag = true
    1.upto(n-1) do |i|
      x2, y2, h2 = arr[i]
      if h2 != [h - (x2 - cx).abs - (y2 - cy).abs, 0].max
        # 矛盾があれば飛ばす
        flag = false
        break
      end
    end
    if flag
      puts [cx, cy, h].join(" ")
      exit
    end
  end
end

# D

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

# 最大公約数をmax_mとすると a_1, a_2, ..., a_n はすべてmax_mで割り切れるので
# m = a_1 + a_2 + ... + a_n もmax_mで割り切れる

# 最大10^9ループ
(m / n).downto(1) do |i|
  if m % i == 0
    puts i
    exit
  end
end

Last Updated: 2020/11/24 23:19