結果
問題 |
No.2445 奇行列式
|
ユーザー |
![]() |
提出日時 | 2025-04-16 16:45:33 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,032 bytes |
コンパイル時間 | 437 ms |
コンパイル使用メモリ | 82,024 KB |
実行使用メモリ | 240,240 KB |
最終ジャッジ日時 | 2025-04-16 16:47:02 |
合計ジャッジ時間 | 11,631 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 6 WA * 14 |
ソースコード
def compute_permanent(matrix, mod): n = len(matrix) row_sums = [[0] * (1 << n) for _ in range(n)] for i in range(n): row_sums[i][0] = 0 for mask in range(1, 1 << n): lsb = mask & -mask j = (lsb).bit_length() - 1 prev_mask = mask ^ lsb row_sums[i][mask] = (row_sums[i][prev_mask] + matrix[i][j]) % mod result = 0 for mask in range(0, 1 << n): bits = bin(mask).count('1') product = 1 for i in range(n): product = (product * row_sums[i][mask]) % mod term = product * ((-1) ** bits) result = (result + term) % mod result = (result * ((-1) ** n)) % mod return result 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 det = 1 for i in range(n): pivot_row = None for j in range(i, n): if mat[j][i] % mod != 0: pivot_row = j break if pivot_row is None: return 0 if pivot_row != i: mat[i], mat[pivot_row] = mat[pivot_row], mat[i] det = (-det) % mod pivot_val = mat[i][i] try: inv_pivot = pow(pivot_val, -1, mod) except ValueError: return 0 det = (det * pivot_val) % mod for j in range(i + 1, n): factor = (mat[j][i] * inv_pivot) % mod for k in range(i, n): mat[j][k] = (mat[j][k] - factor * mat[i][k]) % mod return det n, B = map(int, input().split()) mod = 2 * B matrix = [] for _ in range(n): row = list(map(int, input().split())) matrix.append(row) if B == 0: print(0) else: perm_val = compute_permanent(matrix, mod) det_val = determinant_mod(matrix, mod) numerator = (perm_val - det_val) % mod if numerator % 2 != 0: numerator += mod numerator %= mod O = (numerator // 2) % B print(O)