CPSCO2019 Session4

CPSCO2019 Session4 - AtCoder

A - Swimming

l, x = gets.split.map(&:to_i)
n = x / l
puts n.even? ? x % l : (n + 1) * l - x

 

B - Meeting

n, d = gets.split.map(&:to_i)
table = d.times.map do
  gets.chomp.chars.map.with_index {|st, i| i if st == "o"}.compact
end
puts table.combination(2).map {|d1, d2| (d1 + d2).uniq.size}.max

 

C - Make a Team

def c(a)
  return 1 if a == 1
  a * (a - 1) / 2
end

n, d = gets.split.map(&:to_i)
r = gets.split.map(&:to_i).sort.push(Float::INFINITY)
count = 0
(n - 2).times do |i|
  idx = r[i + 2..-1].bsearch_index {|r0| r0 - r[i] > d}
  next if !idx or idx.zero?
  count += c(idx + 1)
end
puts count

rindex を使ったら TLE だったので、bsearch_index に切り替えた。