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