結果

問題 No.1253 雀見椪
コンテスト
ユーザー ID 21712
提出日時 2026-05-31 18:32:49
言語 Go
(1.26.1)
コンパイル:
env GOCACHE=/tmp go build _filename_
実行:
./Main
結果
AC  
実行時間 532 ms / 2,000 ms
コード長 1,740 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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


だと思う

数学苦手なので正しいかわからない

*/
0