結果
問題 | No.1907 DETERMINATION |
ユーザー |
![]() |
提出日時 | 2025-04-09 21:00:59 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,361 bytes |
コンパイル時間 | 1,077 ms |
コンパイル使用メモリ | 82,584 KB |
実行使用メモリ | 67,072 KB |
最終ジャッジ日時 | 2025-04-09 21:01:59 |
合計ジャッジ時間 | 10,183 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 3 TLE * 1 -- * 59 |
ソースコード
import sys mod = 998244353 def main(): n = int(sys.stdin.readline()) m0 = [] for _ in range(n): row = list(map(int, sys.stdin.readline().split())) m0.append(row) m1 = [] for _ in range(n): row = list(map(int, sys.stdin.readline().split())) m1.append(row) y = [] for x in range(n + 1): mat = [] for i in range(n): row = [(m0[i][j] + x * m1[i][j]) % mod for j in range(n)] mat.append(row.copy()) det = determinant(mat) y.append(det % mod) size = n + 1 d = [[0] * size for _ in range(size)] for i in range(size): d[i][0] = y[i] for j in range(1, size): inv_j = pow(j, mod-2, mod) for i in range(size - j): numerator = (d[i+1][j-1] - d[i][j-1]) % mod d[i][j] = (numerator * inv_j) % mod newton_coeffs = [d[0][k] for k in range(size)] pre_poly = [[1]] for k in range(1, size): a = k - 1 prev_poly = pre_poly[-1] new_poly = [0] * (len(prev_poly) + 1) for i in range(len(prev_poly)): new_poly[i+1] = prev_poly[i] for i in range(len(prev_poly)): new_poly[i] = (new_poly[i] - a * prev_poly[i]) % mod pre_poly.append(new_poly) result = [0] * size for k in range(size): coeff = newton_coeffs[k] current_p = pre_poly[k] for i in range(len(current_p)): result[i] = (result[i] + coeff * current_p[i]) % mod for coeff in result: print(coeff % mod) def determinant(mat): n = len(mat) det = 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 pivot != i: mat[i], mat[pivot] = mat[pivot], mat[i] det = (-det) % mod inv = pow(mat[i][i], mod-2, mod) det = (det * mat[i][i]) % mod mat[i][i] = 1 for j in range(i+1, n): mat[i][j] = (mat[i][j] * inv) % mod for j in range(i+1, n): factor = mat[j][i] for k in range(i, n): mat[j][k] = (mat[j][k] - factor * mat[i][k]) % mod return det % mod if __name__ == "__main__": main()