結果
| 問題 |
No.3175 転移迷宮 (Easy)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-06-21 03:07:18 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,810 ms / 3,000 ms |
| コード長 | 2,560 bytes |
| コンパイル時間 | 507 ms |
| コンパイル使用メモリ | 82,232 KB |
| 実行使用メモリ | 82,784 KB |
| 最終ジャッジ日時 | 2025-08-01 08:15:55 |
| 合計ジャッジ時間 | 48,518 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 44 |
ソースコード
## https://yukicoder.me/problems/no/3175
MOD = 998244353
def calc_inv_matrix(N, matrix):
inv_matrix = [[0] * N for _ in range(N)]
for i in range(N):
inv_matrix[i][i] = 1
for i in range(N):
if matrix[i][i] == 0:
for k in range(i + 1, N):
if matrix[k][i] != 0:
for j in range(N):
tmp = matrix[i][j]
matrix[i][j] = matrix[k][j]
matrix[k][j] = tmp
tmp = inv_matrix[i][j]
inv_matrix[i][j] = inv_matrix[k][j]
inv_matrix[k][j] = tmp
break
# 1にする
inv_alpha = pow(matrix[i][i], MOD - 2, MOD)
for j in range(N):
matrix[i][j] *= inv_alpha
matrix[i][j] %= MOD
inv_matrix[i][j] *= inv_alpha
inv_matrix[i][j] %= MOD
# 引く
for k in range(i + 1, N):
x = matrix[k][i]
for j in range(N):
matrix[k][j] -= (matrix[i][j] * x) % MOD
matrix[k][j] %= MOD
inv_matrix[k][j] -= (inv_matrix[i][j] * x) % MOD
inv_matrix[k][j] %= MOD
for i in reversed(range(N)):
for k in range(i):
x = matrix[k][i]
for j in range(N):
inv_matrix[k][j] -= (inv_matrix[i][j] * x) % MOD
inv_matrix[k][j] %= MOD
return inv_matrix
def solve(N, K):
intercept = [1] * N
matrix = [[0] * N for _ in range(N)]
inv_k = pow(2 * K + 1, MOD - 2 , MOD)
for i in range(N):
cnt = 0
for j in range(N):
if abs(i - j) <= K:
cnt += 1
matrix[i][j] = inv_k
matrix2 = [[0] * N for _ in range(N)]
for i in range(N):
for j in range(N):
if i == j:
matrix2[i][j] = (1 - matrix[i][j]) % MOD
else:
matrix2[i][j] = (- matrix[i][j]) % MOD
inv_matrix = calc_inv_matrix(N, matrix2)
answer = [0] * N
for i in range(N):
for j in range(N):
answer[i] += (inv_matrix[i][j] * intercept[j]) % MOD
answer[i] %= MOD
return " ".join(map(str, answer))
def main():
T = int(input())
answers = []
for _ in range(T):
N, K = map(int, input().split())
ans = solve(N, K)
answers.append(ans)
for ans in answers:
print(ans)
if __name__ == "__main__":
main()