結果

問題 No.66 輝け☆全国たこやき杯
ユーザー yuppe19 😺yuppe19 😺
提出日時 2015-05-08 10:42:23
言語 Go
(1.22.1)
結果
AC  
実行時間 97 ms / 5,000 ms
コード長 1,063 bytes
コンパイル時間 11,963 ms
コンパイル使用メモリ 226,740 KB
実行使用メモリ 12,188 KB
最終ジャッジ日時 2024-04-18 10:47:55
合計ジャッジ時間 11,348 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,940 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 AC 2 ms
6,940 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 AC 3 ms
6,940 KB
testcase_07 AC 8 ms
6,940 KB
testcase_08 AC 26 ms
6,940 KB
testcase_09 AC 97 ms
12,188 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import "fmt"

func mypow(a int, n int) int {
  var res = 1
  for ; n>0; n>>=1 {
    if n&1 == 1 { res *= a }
    a *= a
  }
  return res
}

func mypowf64(a int, n int) float64 { return float64(mypow(a, n)) }

func main() {
  var m int; fmt.Scanf("%d", &m)
  sz := mypow(2, m)
  s := make([]int, sz)
  for i := range s {
    fmt.Scanf("%d", &s[i])
  }
  vs:= make([][]float64, sz)
  for i := range vs {
    vs[i] = make([]float64, sz)
    for j := range vs[i] {
      vs[i][j] = mypowf64(s[i], 2) / (mypowf64(s[i], 2) + mypowf64(s[j], 2))
    }
  }
  prob := make([][]float64, m+1)
  for i := range prob { prob[i] = make([]float64, sz) }
  for j := range prob[0] { prob[0][j] = 1. }
  for i:=1; i<len(prob); i++ {
    for j := range prob[i] {
      prob[i][j] = 0.
      start := j / mypow(2, i) * mypow(2, i)
      kosuu := mypow(2, i)
      for k :=start; k<start+kosuu; k++ {
        if(j/mypow(2,i-1) == k/mypow(2,i-1)) { continue }
        prob[i][j] += prob[i-1][j] * vs[j][k] * prob[i-1][k]
      }
    }
  }
  fmt.Printf("%f\n", prob[m][0])
}
0