結果
問題 |
No.950 行列累乗
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:47:13 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,315 bytes |
コンパイル時間 | 148 ms |
コンパイル使用メモリ | 82,040 KB |
実行使用メモリ | 181,040 KB |
最終ジャッジ日時 | 2025-06-12 16:48:04 |
合計ジャッジ時間 | 7,196 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 4 |
other | TLE * 1 -- * 56 |
ソースコード
def multiply(a, b, p): new_matrix = [[0]*2 for _ in range(2)] for i in range(2): for j in range(2): for k in range(2): new_matrix[i][j] += a[i][k] * b[k][j] new_matrix[i][j] %= p return new_matrix def matrix_pow(a, n, p): result = [[1, 0], [0, 1]] current = a while n > 0: if n % 2 == 1: result = multiply(result, current, p) current = multiply(current, current, p) n = n // 2 return result def find_min_n(A, B, p): visited = dict() current = A n = 1 while True: current = matrix_pow(A, n, p) if current == B: return n key = tuple(map(tuple, current)) if key in visited: return -1 visited[key] = n n += 1 if n > p**4: return -1 def main(): import sys input = sys.stdin.read().split() ptr = 0 p = int(input[ptr]) ptr +=1 A = [] for _ in range(2): row = list(map(int, input[ptr:ptr+2])) ptr +=2 A.append(row) B = [] for _ in range(2): row = list(map(int, input[ptr:ptr+2])) ptr +=2 B.append(row) min_n = find_min_n(A, B, p) print(min_n if min_n != -1 else -1) if __name__ == "__main__": main()