結果
問題 |
No.2445 奇行列式
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:47:57 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,170 bytes |
コンパイル時間 | 162 ms |
コンパイル使用メモリ | 82,912 KB |
実行使用メモリ | 94,860 KB |
最終ジャッジ日時 | 2025-03-20 20:48:06 |
合計ジャッジ時間 | 7,375 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 WA * 8 TLE * 1 -- * 6 |
ソースコード
def compute_permanent_mod(A, N, mod): dp = [0] * (1 << N) dp[0] = 1 for i in range(N): new_dp = [0] * (1 << N) for mask in range(1 << N): if bin(mask).count('1') != i: continue if dp[mask] == 0: continue temp = (~mask) & ((1 << N) - 1) while temp: lsb = temp & -temp j = (lsb.bit_length() - 1) new_mask = mask | lsb new_dp[new_mask] = (new_dp[new_mask] + dp[mask] * A[i][j]) % mod temp ^= lsb dp = new_dp return dp[(1 << N) - 1] 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 mod_inverse(a, m): g, x, y = extended_gcd(a, m) if g != 1: return None else: return x % m def determinant_mod(matrix, m): matrix = [row[:] for row in matrix] n = len(matrix) result = 1 for i in range(n): pivot = -1 for j in range(i, n): if matrix[j][i] % m != 0: pivot = j break if pivot == -1: return 0 if pivot != i: matrix[i], matrix[pivot] = matrix[pivot][:], matrix[i][:] result = (-result) % m inv = mod_inverse(matrix[i][i], m) if inv is None: return 0 for j in range(i + 1, n): factor = (matrix[j][i] * inv) % m for k in range(i, n): matrix[j][k] = (matrix[j][k] - factor * matrix[i][k]) % m result = (result * matrix[i][i]) % m return result def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 B = int(input[idx]) idx += 1 mod = 2 * B A = [] for _ in range(N): row = list(map(int, input[idx:idx+N])) idx += N A.append(row) perm = compute_permanent_mod(A, N, mod) det = determinant_mod(A, mod) s_minus_d = (perm - det) % mod ans = (s_minus_d // 2) % B print(ans) if __name__ == "__main__": main()