結果
問題 |
No.2445 奇行列式
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:56:24 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,884 bytes |
コンパイル時間 | 401 ms |
コンパイル使用メモリ | 82,160 KB |
実行使用メモリ | 87,672 KB |
最終ジャッジ日時 | 2025-03-20 20:56:52 |
合計ジャッジ時間 | 6,915 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 13 TLE * 1 -- * 6 |
ソースコード
def compute_permanent_mod(matrix, mod): n = len(matrix) dp = [0] * (1 << n) dp[0] = 1 for row in range(n): for mask in range((1 << n) - 1, -1, -1): if bin(mask).count('1') != row: continue for col in range(n): if not (mask & (1 << col)): new_mask = mask | (1 << col) dp[new_mask] = (dp[new_mask] + dp[mask] * matrix[row][col]) % mod return dp[(1 << n) - 1] def determinant_mod(matrix, mod): n = len(matrix) mat = [row[:] for row in matrix] for i in range(n): for j in range(n): mat[i][j] %= mod res = 1 for i in range(n): pivot = -1 for j in range(i, n): if mat[j][i] != 0: pivot = j break if pivot == -1: return 0 if i != pivot: mat[i], mat[pivot] = mat[pivot], mat[i] res = (-res) % mod a = mat[i][i] for j in range(i + 1, n): b = mat[j][i] while b != 0: q, r = divmod(a, b) for k in range(i, n): mat[i][k] = (mat[i][k] - q * mat[j][k]) % mod mat[i], mat[j] = mat[j], mat[i] res = (-res) % mod a, b = b, r if a == 0: return 0 res = (res * a) % mod return res def main(): import sys input = sys.stdin.read().split() ptr = 0 N, B = int(input[ptr]), int(input[ptr+1]) ptr += 2 matrix = [] for _ in range(N): row = list(map(int, input[ptr:ptr+N])) ptr += N matrix.append(row) mod = 2 * B S = compute_permanent_mod(matrix, mod) D = determinant_mod(matrix, mod) delta = (S - D) % mod result = (delta // 2) % B print(result) if __name__ == "__main__": main()