結果
問題 |
No.2445 奇行列式
|
ユーザー |
![]() |
提出日時 | 2025-04-24 12:22:49 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,223 bytes |
コンパイル時間 | 189 ms |
コンパイル使用メモリ | 81,852 KB |
実行使用メモリ | 240,764 KB |
最終ジャッジ日時 | 2025-04-24 12:24:35 |
合計ジャッジ時間 | 12,331 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 6 WA * 14 |
ソースコード
import sys from math import gcd def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) def determinant_mod(matrix, n, mod): det = 1 mat = [row.copy() for row in matrix] for c in range(n): pivot = -1 for r in range(c, n): if mat[r][c] % mod != 0: pivot = r break if pivot == -1: return 0 if pivot != c: mat[c], mat[pivot] = mat[pivot], mat[c] det = (-det) % mod a = mat[c][c] % mod if a == 0: return 0 g, x, y = extended_gcd(a, mod) if g != 1: return 0 inv = x % mod for r in range(c + 1, n): factor = (mat[r][c] * inv) % mod for j in range(c, n): mat[r][j] = (mat[r][j] - factor * mat[c][j]) % mod det = (det * a) % mod return det def compute_permanent_mod(A, n, mod): row_sums = [] for i in range(n): sums = [0] * (1 << n) for mask in range(1, 1 << n): lsb = mask & -mask j = (lsb).bit_length() - 1 sums[mask] = (sums[mask ^ lsb] + A[i][j]) % mod row_sums.append(sums) total = 0 for mask in range(1, 1 << n): k = bin(mask).count('1') if k % 2 == 0: sign = 1 else: sign = mod - 1 product = 1 for i in range(n): product = (product * row_sums[i][mask]) % mod term = (sign * product) % mod total = (total + term) % mod if n % 2 == 1: total = (-total) % mod return total def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 B = int(input[ptr]) ptr += 1 A = [] for _ in range(N): row = list(map(int, input[ptr:ptr + N])) ptr += N A.append(row) mod = 2 * B if N == 0: print(0) return perm = compute_permanent_mod(A, N, mod) det = determinant_mod(A, N, mod) s_minus_d = (perm - det) % mod ans = (s_minus_d // 2) % B print(ans) if __name__ == '__main__': main()