結果
| 問題 |
No.2445 奇行列式
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 01:02:25 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,032 bytes |
| コンパイル時間 | 346 ms |
| コンパイル使用メモリ | 82,096 KB |
| 実行使用メモリ | 240,492 KB |
| 最終ジャッジ日時 | 2025-04-16 01:04:41 |
| 合計ジャッジ時間 | 11,751 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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)
lam6er