結果
問題 |
No.3226 2×2行列累乗
|
ユーザー |
![]() |
提出日時 | 2025-08-08 22:26:46 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,520 bytes |
コンパイル時間 | 207 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 32,204 KB |
最終ジャッジ日時 | 2025-08-08 22:27:09 |
合計ジャッジ時間 | 11,621 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 RE * 3 |
ソースコード
def matrix_mult(A, B): H,W,K = len(A),len(B[0]),len(A[0]) ans = [[0]*W for _ in range(H)] for i in range(H): for j in range(W): for k in range(K): ans[i][j] += A[i][k]*B[k][j] return ans def matrix_pow(X, n, cnt): # print(f"in: id(cnt)={id(cnt)}") if n == 1: return X elif n%2 == 0: X2 = matrix_mult(X,X) cnt += 1 # print(f"cnt={cnt}") # print(f"in: id(cnt)={id(cnt)}") for i in range(2): for j in range(2): if X2[i][j]!=0: X2[i][j]%=k return matrix_pow(X2, n//2, cnt) else: cnt += 1 # print(f"cnt={cnt}") # print(f"in: id(cnt)={id(cnt)}") X2 = matrix_mult(X, matrix_pow(X, n-1, cnt)) for i in range(2): for j in range(2): if X2[i][j]!=0: X2[i][j]%=k return X2 M = [list(map(int,input().split()))for _ in range(2)] s,t = map(int,input().split()) n,k=map(int,input().split()) M = matrix_pow(M, n, 0) # explist = [] # u = n # from math import log2 # while u > 1: # if u%2 == 0: # u //= 2 # explist.append(int(log2(u))) # else: # o = u // 2 # u = u - o # explist.append(int(log2(u))) # explist.reverse() # print(*explist) # i = 0 # for e in explist: # M = multiple_matrix(M) import numpy as np M = np.array(M) x = np.array([s,t]) ans = M@x for i in range(2): print(ans[i]%k,end=" ")