結果
問題 | 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)) }