結果
問題 | No.173 カードゲーム(Medium) |
ユーザー | tnoda_ |
提出日時 | 2015-04-17 23:29:01 |
言語 | Go (1.22.1) |
結果 |
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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 7 ms
6,816 KB |
testcase_01 | AC | 28 ms
7,820 KB |
testcase_02 | AC | 194 ms
8,076 KB |
testcase_03 | AC | 194 ms
8,080 KB |
testcase_04 | AC | 185 ms
8,076 KB |
testcase_05 | AC | 166 ms
8,080 KB |
testcase_06 | AC | 150 ms
8,080 KB |
testcase_07 | AC | 144 ms
8,076 KB |
testcase_08 | AC | 145 ms
8,076 KB |
testcase_09 | AC | 226 ms
8,076 KB |
ソースコード
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)) }