結果
問題 | No.3006 ベイカーの問題 |
ユーザー |
|
提出日時 | 2025-02-03 15:39:59 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,269 bytes |
コンパイル時間 | 576 ms |
コンパイル使用メモリ | 82,588 KB |
実行使用メモリ | 58,516 KB |
最終ジャッジ日時 | 2025-02-03 15:40:04 |
合計ジャッジ時間 | 3,302 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 WA * 2 |
ソースコード
import sysimport mathimport bisectfrom heapq import heapify, heappop, heappushfrom collections import deque, defaultdict, Counterfrom functools import lru_cachefrom itertools import accumulate, combinations, permutations, productsys.set_int_max_str_digits(10 ** 6)sys.setrecursionlimit(1000000)MOD = 10 ** 9 + 7MOD99 = 998244353input = lambda: sys.stdin.readline().strip()NI = lambda: int(input())NMI = lambda: map(int, input().split())NLI = lambda: list(NMI())SI = lambda: input()SMI = lambda: input().split()SLI = lambda: list(SMI())EI = lambda m: [NLI() for _ in range(m)]# 行列積(任意サイズ)def mul_matrix(A, B, mod=998244353):Ah = len(A)Aw = len(A[0])Bh = len(B)Bw = len(B[0])assert Aw == BhC = [[0] * Bw for _ in range(Ah)]for h in range(Ah):Arow = A[h]Crow = C[h]for i in range(Aw):a = Arow[i]Brow = B[i]for w in range(Bw):Crow[w] = (Crow[w] + a * Brow[w]) % modreturn C# 正方行列の累乗 moddef pow_matrix(A, n, mod=998244353):assert len(A) == len(A[0])bitn = len(bin(n)) - 2pows = []size = len(A)E = [[0] * size for _ in range(size)]for i in range(size):E[i][i] = 1pows.append(A)ans = Efor i in range(bitn):if (n >> i) & 1:ans = mul_matrix(pows[-1], ans, mod)pows.append(mul_matrix(pows[-1], pows[-1], mod))return ansdef main():X1, Y1, N = NMI()if X1 == Y1 == 0:print(X1, Y1)returnif X1 == 1 and Y1 == 0:print(N%MOD99, 0)returnA = [[X1, -5*Y1],[Y1, X1]]# (XN, YN)T = A^(N-1) * (X1, Y1)T# A^(N-1)+...+A^0 = (A^N - E) * (A-E)^-1X = pow_matrix(A, N, MOD99)XE = [[X[0][0]-1, X[0][1]],[X[1][0], X[1][1]-1]]AE = [[X1-1, -5*Y1],[Y1, X1-1]]d = AE[0][0]*AE[1][1]-AE[0][1]*AE[1][0]dinv = pow(d, MOD99-2, MOD99)AEinv = [[AE[1][1]*dinv, -AE[0][1]*dinv],[-AE[1][0]*dinv, AE[0][0]*dinv]]X = mul_matrix(XE, AEinv, MOD99)x = X[0][0] * X1 + X[0][1] * Y1y = X[1][0] * X1 + X[1][1] * Y1print(x%MOD99, y%MOD99)if __name__ == "__main__":main()