結果
| 問題 |
No.173 カードゲーム(Medium)
|
| コンテスト | |
| ユーザー |
tnoda_
|
| 提出日時 | 2015-04-17 23:29:01 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 226 ms / 3,000 ms |
| コード長 | 1,370 bytes |
| コンパイル時間 | 10,638 ms |
| コンパイル使用メモリ | 239,888 KB |
| 実行使用メモリ | 8,080 KB |
| 最終ジャッジ日時 | 2024-10-10 03:40:05 |
| 合計ジャッジ時間 | 12,790 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
package main
import (
"fmt"
"math/rand"
"sort"
)
func main() {
rand.Seed(10)
var N int
var PA, PB float32
fmt.Scan(&N, &PA, &PB)
A, B := make([]int, N), make([]int, N)
for i := 0; i < N; i++ {
fmt.Scan(&A[i])
}
for i := 0; i < N; i++ {
fmt.Scan(&B[i])
}
sort.Ints(A)
sort.Ints(B)
sim := func() bool {
makeDeck := func() (x, y []int) {
x, y = make([]int, N), make([]int, N)
for i := 0; i < N; i++ {
x[i], y[i] = i, i
}
return
}
playGame := func(deck *[]int, cards []int, p float32) (z int) {
L := len(*deck)
if L > 1 && rand.Float32() > p {
i := rand.Intn(L-1) + 1
z = cards[(*deck)[i]]
if i == L-1 {
*deck = (*deck)[:(L - 1)]
} else {
*deck = (*deck)[:i+copy((*deck)[i:], (*deck)[i+1:])]
}
return
}
z = cards[(*deck)[0]]
*deck = (*deck)[1:]
return
}
deckA, deckB := makeDeck()
var score int
for i := 0; i < N; i++ {
cardA := playGame(&deckA, A, PA)
cardB := playGame(&deckB, B, PB)
point := cardA + cardB
switch {
case cardA > cardB:
score += point
case cardA < cardB:
score -= point
default:
fmt.Println(cardA, cardB)
panic("not distinct!: ")
}
}
return score > 0
}
attempt := 100000
var win int
for i := 0; i < attempt; i++ {
if sim() {
win++
}
}
fmt.Printf("%f\n", 1.0*float32(win)/float32(attempt))
}
tnoda_