結果
問題 |
No.950 行列累乗
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:42:42 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,354 bytes |
コンパイル時間 | 324 ms |
コンパイル使用メモリ | 81,812 KB |
実行使用メモリ | 324,936 KB |
最終ジャッジ日時 | 2025-06-12 21:47:59 |
合計ジャッジ時間 | 78,420 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 30 WA * 26 TLE * 1 |
ソースコード
import sys def readints(): return list(map(int, sys.stdin.readline().split())) def mat_mult(a, b, p): res = [[0]*2 for _ in range(2)] for i in range(2): for j in range(2): for k in range(2): res[i][j] = (res[i][j] + a[i][k] * b[k][j]) % p return res def mat_pow(a, n, p): result = [[1 if i == j else 0 for j in range(2)] for i in range(2)] while n > 0: if n % 2 == 1: result = mat_mult(result, a, p) a = mat_mult(a, a, p) n = n // 2 return result def main(): p = int(sys.stdin.readline()) A = [] for _ in range(2): A.append(readints()) B = [] for _ in range(2): B.append(readints()) if A == B: print(1) return seen = {} current = A.copy() n = 1 seen_key = tuple(current[0] + current[1]) seen[seen_key] = n found = False while True: current = mat_mult(current, A, p) n += 1 current_key = tuple(current[0] + current[1]) if current_key == tuple(B[0]+B[1]): print(n) found = True break if current_key in seen: break seen[current_key] = n if n > 1000000: break if not found: print(-1) if __name__ == "__main__": main()