結果
問題 | No.1547 [Cherry 2nd Tune *] 偶然の勝利の確率 |
ユーザー |
![]() |
提出日時 | 2021-06-11 23:05:50 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,422 ms / 2,000 ms |
コード長 | 1,184 bytes |
コンパイル時間 | 343 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 88,576 KB |
最終ジャッジ日時 | 2024-12-15 02:06:52 |
合計ジャッジ時間 | 20,097 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
def matmul(A,B): # A,B: 行列res = [[0]*len(B[0]) for _ in [None]*len(A)]for i, resi in enumerate(res):for k, aik in enumerate(A[i]):for j,bkj in enumerate(B[k]):resi[j] += aik*bkjresi[j] %= MODreturn resdef matpow(A,p): #A^p mod Mif p%2:return matmul(A, matpow(A,p-1))elif p > 0:b = matpow(A,p//2)return matmul(b,b)else:return [[int(i==j) for j in range(len(A))] for i in range(len(A))]MOD = 998244353m,n,s = map(int,input().split())p = m*pow(n,MOD-2,MOD)%MODm,n,t = map(int,input().split())q = m*pow(n,MOD-2,MOD)%MOD"""[-t,...0,...,s]offset = -t"""N = s+t+1N2 = 2*NA = [[0]*N2 for _ in range(N2)]A[0][N] = 1for i in range(1,N):A[i][i+N] = v = 1-pfor j in range(i+1,N):v = v*p%MODA[i][j+N] = vA[i][N2-1] = pow(p,N-i-1,MOD)B = [[0]*N2 for _ in range(N2)]B[N2-1][N-1] = 1for i in range(N-1):B[i+N][i] = v = 1-qfor j in range(i)[::-1]:v = v*q%MODB[i+N][j] = vB[i+N][0] = pow(q,i,MOD)C = matmul(A,B)C = matpow(C,int(input()))v = C[t]print(v[N-1]%MOD)print(v[0]%MOD)