結果
| 問題 | No.1253 雀見椪 |
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2026-05-31 18:32:49 |
| 言語 | Go (1.26.1) |
| 結果 |
AC
|
| 実行時間 | 532 ms / 2,000 ms |
| コード長 | 1,740 bytes |
| 記録 | |
| コンパイル時間 | 12,465 ms |
| コンパイル使用メモリ | 289,780 KB |
| 実行使用メモリ | 7,040 KB |
| 最終ジャッジ日時 | 2026-05-31 18:33:11 |
| 合計ジャッジ時間 | 19,497 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge3_1 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 14 |
ソースコード
package main
import . "fmt"
import . "math/big"
const M = 1e9+7
var IntM = NewInt(M)
func modinv(a int) int {
return int(new(Int).ModInverse(NewInt(int64(a)), IntM).Int64())
}
func modpow(a, p int) int {
return int(new(Int).Exp(NewInt(int64(a)),NewInt(int64(p)),IntM).Int64())
}
func main() {
var t int
Scan(&t)
for ; t > 0; t-- {
var n,ag,bg,ac,bc,ap,bp int
Scan(&n,&ag,&bg,&ac,&bc,&ap,&bp)
bg = modinv(bg)
bc = modinv(bc)
bp = modinv(bp)
allNoG := modpow((1 - ag*bg%M + M)%M, n)
allNoC := modpow((1 - ac*bc%M + M)%M, n)
allNoP := modpow((1 - ap*bp%M + M)%M, n)
allG := modpow(ag*bg%M, n)
allC := modpow(ac*bc%M, n)
allP := modpow(ap*bp%M, n)
ans := 1 - allNoG - allNoC - allNoP + 2 * allG + 2 * allC + 2 * allP
ans = (M + ans%M)%M
Println(ans)
}
}
/*
考察
(あいこの確率) = 1 - (決着がつく確率)
あいこの種類
全員グー
全員チョキ
全員パー
グーチョキパーがそれぞれ1人以上いる
決着がつく種類
全員が1人以上のグーと1人以上のチョキで分かれる (= 全員がパー以外 - 全員がグー - 全員がチョキ)
全員が1人以上のグーと1人以上のパーで分かれる (= 全員がチョキ以外 - 全員がグー - 全員がパー)
全員が1人以上のチョキと1人以上のパーで分かれる (= 全員がグー以外 - 全員がチョキ - 全員がパー)
つまり 1 - ( (1-AP/BP)^N - (AG/BG)^N - (AC/BC)^N )
- ( (1-AC/BC)^N - (AG/BG)^N - (AP/BP)^N )
- ( (1-AG/BG)^N - (AC/BC)^N - (AP/BP)^N )
= 1 - (1-AG/BG)^N - (1-AC/BC)^N - (1-AP/BP)^N + 2 * (AG/BG)^N + 2 * (AC/BC)^N + 2 * (AP/BP)^N
だと思う
数学苦手なので正しいかわからない
*/
ID 21712