結果
| 問題 |
No.58 イカサマなサイコロ
|
| ユーザー |
tsuchinaga
|
| 提出日時 | 2019-03-18 16:03:35 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 944 bytes |
| コンパイル時間 | 13,830 ms |
| コンパイル使用メモリ | 233,936 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-18 10:39:35 |
| 合計ジャッジ時間 | 14,008 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
package main
import "fmt"
func main() {
var n, m int
_, _ = fmt.Scan(&n, &m)
p1 := map[int]int{1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}
p1 = pattern58([]int{1, 2, 3, 4, 5, 6}, p1, n-1)
p2 := map[int]int{}
if n == m {
p2 = map[int]int{4: 2, 5: 2, 6: 2}
p2 = pattern58([]int{4, 5, 6, 4, 5, 6}, p2, m-1)
} else {
p2 = map[int]int{1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}
p2 = pattern58([]int{1, 2, 3, 4, 5, 6}, p2, n-1-m)
p2 = pattern58([]int{4, 5, 6, 4, 5, 6}, p2, m)
}
// fmt.Println(p1, p2)
var w, o int // 勝ち, それ以外
for d1, c1 := range p1 {
for d2, c2 := range p2 {
if d1 < d2 {
w += c1 * c2
} else {
o += c1 * c2
}
}
}
fmt.Printf("%f\n", float64(w)/float64(w+o))
}
func pattern58(p []int, q map[int]int, n int) map[int]int {
if n == 0 {
return q
} else {
r := map[int]int{}
for k, v := range q {
for _, n := range p {
r[k+n] += v
}
}
return pattern58(p, r, n-1)
}
}
tsuchinaga