結果
| 問題 |
No.1907 DETERMINATION
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 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()
gew1fw