(備忘録)AtCoderをやって12(Dice and Coin)
問題
下記参照
自分の回答(不正解)
N, K = gets.chomp.split.map(&:to_i) arr = [] i = N + 1 if N <= K # 分からなかった else (1..N).each do |n| if n == 1 probability = Rational(1, N) * Rational(1, 2)**(i) arr << probability else probability = Rational(1, N) * Rational(1, 2)**(i) arr << probability end i -= 1 end end result = arr.sum puts result.numerator / result.denominator
模範回答
tmpはサイコロの目の数。1からn面までのサイコロの目を検証。
n,k = gets.split.map(&:to_i) ary = [] 1.upto(n) do |i| tmp = i cnt = 0 while tmp < k do tmp *= 2 cnt += 1 end ary << 1/(n.to_f) * 1/(2.to_f**cnt) end puts ary.sum