結果
問題 |
No.3231 2×2行列相似判定 〜hard〜
|
ユーザー |
|
提出日時 | 2025-08-08 23:00:15 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,372 bytes |
コンパイル時間 | 307 ms |
コンパイル使用メモリ | 82,172 KB |
実行使用メモリ | 78,084 KB |
最終ジャッジ日時 | 2025-08-08 23:00:20 |
合計ジャッジ時間 | 5,313 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 RE * 2 |
other | AC * 18 WA * 1 RE * 18 |
ソースコード
import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### mod = 10 ** 9 + 7 def f(A): if A == [[0, 0], [0, 0]]: r = 0 elif (A[0][0] * A[1][1] - A[0][1] * A[1][0]) % mod == 0: r = 1 else: r = 2 return (A[0][0] + A[1][1]) % mod, (A[0][0] * A[1][1] - A[0][1] * A[1][0]) % mod, r def mat_mul(A, B): return [[(A[0][0] * B[0][0] + A[0][1] * B[1][0]) % mod, (A[0][0] * B[0][1] + A[0][1] * B[1][1]) % mod], [(A[1][0] * B[0][0] + A[1][1] * B[1][0]) % mod, (A[1][0] * B[0][1] + A[1][1] * B[1][1]) % mod]] def inv(A): INV = pow(A[0][0] * A[1][1] - A[0][1] * A[1][0], mod - 2, mod) return [[A[1][1] * INV % mod, -A[0][1] * INV % mod], [-A[1][0] * INV % mod, A[0][0] * INV % mod]] A = [na(), na()] B = [na(), na()] ans = 1 from random import randint for _ in range(1000): # print(f(A), f(B)) p = [[randint(0, mod -1) for _ in range(2)] for _ in range(2)] if f(p) [1] == 0: continue A = mat_mul(inv(p), mat_mul(A, p)) if f(A) != f(B): ans = 0 if ans: Yes() else: assert False