(備忘録)問題解決のための「アルゴリズム数学」〜 5
問題
自分の回答
これだと1つ1つのペアをeachするのでTLEになってしまいます。
gets cnt = 0 gets.split.map(&:to_i).combination(2).each do |i| if i.inject(:+) == 100000 cnt += 1 end end puts cnt
他の回答
gets # tally要素の数を数え上げた結果をHashで返す A = gets.split.map(&:to_i).tally ans = 0 A.each do |key, value| # 50000を2枚選んだ時だけ異なる if key == 50000 ans += value * (value - 1) / 2 elsif A[100000 - key] ans += A[key] * A[100000 - key] A.delete(100000 - key) end end puts ans