結果
問題 | No.3006 ベイカーの問題 |
ユーザー |
![]() |
提出日時 | 2025-01-17 22:50:34 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 63 ms / 2,000 ms |
コード長 | 1,632 bytes |
コンパイル時間 | 622 ms |
コンパイル使用メモリ | 82,124 KB |
実行使用メモリ | 62,208 KB |
最終ジャッジ日時 | 2025-01-17 22:50:37 |
合計ジャッジ時間 | 2,722 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
mod = 998244353def mat_mul(A, B, f = 1): #行列同士と行列ベクトルの積を計算n = len(A)if f: #modの計算を行うか分岐global modif isinstance(B[0], list): #行列同士の積か分岐C = [[0 for _ in range(n)] for _ in range(n)]for y in range(n):for x in range(n):for d in range(n):C[y][x] += A[y][d] * B[d][x] % modC[y][x] %= modreturn Celse:C = [0 for _ in range(n)]for y in range(n):for x in range(n):C[y] += A[y][x] * B[x] % modC[y] %= modreturn Celse:if isinstance(B[0], list):C = [[0 for _ in range(n)] for _ in range(n)]for y in range(n):for x in range(n):for d in range(n):C[y][x] += A[y][d] * B[d][x]return Celse:C = [0 for _ in range(n)]for y in range(n):for x in range(n):C[y] += A[y][x] * B[x]return Cdef pow_mat(M, B, n): #行列の累乗(M = 正規行列、 B = 遷移行列)while n:if n & 1:M = mat_mul(B, M)B = mat_mul(B, B)n >>= 1return Mx1, y1, n = map(int, input().split())B = [[x1, -5*y1, 0, 0], [y1, x1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1]]B = pow_mat([[1 if i == j else 0 for j in range(4)] for i in range(4)], B, n)A = mat_mul(B, [x1, y1, 0, 0])print(*A[2:])