結果
問題 |
No.1907 DETERMINATION
|
ユーザー |
![]() |
提出日時 | 2025-06-12 13:19:49 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,678 bytes |
コンパイル時間 | 530 ms |
コンパイル使用メモリ | 82,280 KB |
実行使用メモリ | 119,624 KB |
最終ジャッジ日時 | 2025-06-12 13:22:12 |
合計ジャッジ時間 | 7,347 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 3 TLE * 1 -- * 59 |
ソースコード
mod = 998244353 def main(): import sys input = sys.stdin.read().split() ptr = 0 n = int(input[ptr]) ptr += 1 m0 = [] for _ in range(n): row = list(map(int, input[ptr:ptr+n])) ptr += n m0.append(row) m1 = [] for _ in range(n): row = list(map(int, input[ptr:ptr+n])) ptr += n m1.append(row) # Choose n+1 distinct points, x = 0, 1, ..., n points = list(range(n+1)) y = [] for x in points: 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_val = 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: det_val = 0 break if pivot != i: mat[i], mat[pivot] = mat[pivot], mat[i] det_val = (-det_val) % mod inv = pow(mat[i][i], mod-2, mod) det_val = (det_val * mat[i][i]) % mod for j in range(i+1, n): factor = (mat[j][i] * inv) % mod for k in range(i, n): mat[j][k] = (mat[j][k] - factor * mat[i][k]) % mod y.append(det_val) # Lagrange interpolation coeff = [0]*(n+1) for i in range(n+1): xi = points[i] yi = y[i] # Compute Lagrange basis polynomial L_i(x) numerator = [1] # product (x - xj) for j != i for j in range(n+1): if j == i: continue term = [-points[j], 1] # x - xj new_num = [0]*(len(numerator)+1) for a in range(len(numerator)): for b in range(len(term)): new_num[a+b] = (new_num[a+b] + numerator[a] * term[b]) % mod numerator = new_num # Compute denominator: product (xi - xj) for j != i denominator = 1 for j in range(n+1): if j != i: denominator = denominator * (xi - points[j]) % mod inv_denominator = pow(denominator, mod-2, mod) # Multiply numerator by inv_denominator and yi for k in range(len(numerator)): numerator[k] = numerator[k] * inv_denominator % mod numerator[k] = numerator[k] * yi % mod # Add to coefficients for k in range(len(numerator)): coeff[k] = (coeff[k] + numerator[k]) % mod for c in coeff: print(c) if __name__ == "__main__": main()