結果
| 問題 |
No.2445 奇行列式
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er