ABC159

https://atcoder.jp/contests/abc159
過去問。

A: The Number of Even Pairs

偶数から2個か奇数から2個取ればよい。

#x個の中から2個取る組み合わせの数
def c(x)
  return 0 if x == 0 || x == 1
  x * (x - 1) / 2
end

n, m = gets.split.map(&:to_i)
puts c(n) + c(m)

 

B: String Palindrome

#回文(palindrome)か
def pl?(str)
  str == str.reverse
end

s = gets.chomp
n = s.length
f = pl?(s) && pl?(s[0..(n - 3) / 2]) && pl?(s[(n + 1) / 2..-1])

puts f ? "Yes" : "No"

 

C: Maximum Volume

立方体になるときがいちばん体積が大きくなる。

x = gets.to_r / 3
puts (x ** 3).to_f

 

D: Banned K

まずは組み合わせの数をすべて足し合わせたもの(sum)を求めておく。

#x個の中から2個取る組み合わせの数
def c(x)
  return 0 if x == 0 || x == 1
  x * (x - 1) / 2
end

gets
balls = gets.split.map(&:to_i)

numbers_table = Hash.new(0)
balls.each {|n| numbers_table[n] += 1}

sum = numbers_table.map {|n, i| c(i)}.inject(&:+)

balls.each do |n|
  puts sum - c(numbers_table[n]) + c(numbers_table[n] - 1)
end