結果
問題 | No.66 輝け☆全国たこやき杯 |
ユーザー |
![]() |
提出日時 | 2017-07-08 16:58:27 |
言語 | Java (openjdk 23) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,121 bytes |
コンパイル時間 | 2,230 ms |
コンパイル使用メモリ | 77,532 KB |
実行使用メモリ | 42,572 KB |
最終ジャッジ日時 | 2024-10-06 19:45:54 |
合計ジャッジ時間 | 4,414 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | RE * 10 |
ソースコード
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int M = sc.nextInt();int[] s = new int[(int)Math.pow(2, M) + 1];for(int i = 1; i < s.length; i++) {s[i] = sc.nextInt();}int num = s.length;// dp[j][i]は選手iがj回戦に勝つ確率double[][] dp = new double[M + 1][num + 1];for(int i = 1; i < num + 1; i++) {int aite = i + 1;if(i % 2 == 0) aite = i - 1;dp[1][i] = (double)(s[i] * s[i]) / (double)(s[i] * s[i] + s[aite] * s[aite]);}for(int j = 2; j <= M; j++) {for(int i = 1; i < num + 1; i++) {int k = (i + (int)Math.pow(2, j - 1) - 1) / (int)Math.pow(2, j - 1);int aite = k + 1;if(k % 2 == 0) aite = k - 1;double p = 0;for(int l = (int)Math.pow(2, j - 1) * (aite - 1) + 1; l <= (int)Math.pow(2, j - 1) * aite; i++) {p += (dp[j - 1][l] * ((double)(s[i] * s[i]) / (double)(s[i] * s[i] + s[l] * s[l])));}dp[j][i] = dp[j - 1][i] * p;}}System.out.println(dp[M][1]);}}