結果
| 問題 | 
                            No.66 輝け☆全国たこやき杯
                             | 
                    
| コンテスト | |
| ユーザー | 
                             siman
                         | 
                    
| 提出日時 | 2022-03-30 06:15:29 | 
| 言語 | Ruby  (3.4.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 1,034 ms / 5,000 ms | 
| コード長 | 645 bytes | 
| コンパイル時間 | 232 ms | 
| コンパイル使用メモリ | 7,424 KB | 
| 実行使用メモリ | 12,416 KB | 
| 最終ジャッジ日時 | 2024-11-14 03:01:03 | 
| 合計ジャッジ時間 | 3,017 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 10 | 
コンパイルメッセージ
Syntax OK
ソースコード
M = gets.to_i
N = 2 ** M
S = N.times.map { gets.to_i }
dp = Array.new(N, 1.0)
play_cnt = N / 2
M.times do
  temp = Array.new(N, 0.0)
  len = N / play_cnt
  play_cnt.times do |i|
    l = i * len
    m = i * len + len / 2
    r = (i + 1) * len - 1
    l.upto(m - 1) do |a|
      m.upto(r) do |b|
        next if a == b
        win_rate = Rational(S[a] ** 2, S[a] ** 2 + S[b] ** 2)
        temp[a] += win_rate * dp[b] * dp[a]
        win_rate = Rational(S[b] ** 2, S[a] ** 2 + S[b] ** 2)
        temp[b] += win_rate * dp[a] * dp[b]
        # temp[b] += 1.0 - win_rate
      end
    end
  end
  dp = temp
  play_cnt /= 2
end
puts dp[0].to_f
            
            
            
        
            
siman