結果
| 問題 |
No.950 行列累乗
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 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()
gew1fw