結果
問題 |
No.950 行列累乗
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:46:24 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,354 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 82,576 KB |
実行使用メモリ | 325,248 KB |
最終ジャッジ日時 | 2025-06-12 16:48:23 |
合計ジャッジ時間 | 82,667 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 WA * 25 TLE * 3 |
ソースコード
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()