結果
| 問題 | No.3777 Train Seats |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-10-23 21:56:39 |
| 言語 | PyPy3 (8.0.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 113 ms / 2,000 ms |
| + 945µs | |
| コード長 | 1,001 bytes |
| 記録 | |
| コンパイル時間 | 94 ms |
| コンパイル使用メモリ | 64,512 KB |
| 実行使用メモリ | 109,504 KB |
| 最終ジャッジ日時 | 2026-10-23 21:57:03 |
| 合計ジャッジ時間 | 9,230 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge6_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
ソースコード
MOD = 998244353
def factorial(n):
F = [1]
for i in range(1, n+1):
F.append(F[-1]*i%MOD)
invF = [pow(F[-1], -1, MOD)]
for i in reversed(range(n)):
invF.append(invF[-1]*(i+1)%MOD)
invF = invF[::-1]
return F, invF
F, invF = factorial(10**6)
N = int(input())
if N == 1:
exit(print(1))
dp = [[0]*(N+1) for _ in range(N+1)]
dp[0][0] = 1
for i in range(N):
for j in range(N+1):
if dp[i][j] == 0: continue
if i == 0:
dp[i+1][j+1] += dp[i][j]
dp[i+1][j+1] %= MOD
if i+2 <= N:
dp[i+2][j+1] += dp[i][j]
dp[i+2][j+1] %= MOD
else:
if i+2 <= N:
dp[i+2][j+1] += dp[i][j]
dp[i+2][j+1] %= MOD
if i+3 <= N:
dp[i+3][j+1] += dp[i][j]
dp[i+3][j+1] %= MOD
ans = 0
for i in range(N-1, N+1):
for j in range(N+1):
ans += dp[i][j]*F[j]%MOD*F[N-j]%MOD
ans %= MOD
print(ans)
detteiuu