結果
| 問題 | No.3777 Train Seats |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-26 02:40:48 |
| 言語 | PyPy3 (8.0.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 69 ms / 2,000 ms |
| + 698µs | |
| コード長 | 1,395 bytes |
| 記録 | |
| コンパイル時間 | 147 ms |
| コンパイル使用メモリ | 64,444 KB |
| 実行使用メモリ | 91,008 KB |
| 最終ジャッジ日時 | 2026-10-26 02:41:28 |
| 合計ジャッジ時間 | 6,245 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
ソースコード
# https://github.com/robe2222555/atcoder-lib/blob/main/template/python/main.py import sys input = lambda: sys.stdin.readline().rstrip() def LI(): return list(map(int, input().split())) def II(): return int(input()) INF = 1<<60 # https://github.com/robe2222555/atcoder-lib/blob/main/3_数学/組み合わせ/組み合わせ計算.py LIM = 1<<20 mod = 998244353 fac=[1]*LIM ninv=[1]*LIM finv=[1]*LIM for i in range(2, LIM): fac[i] = fac[i-1]*i%mod ninv[i] = (-(mod//i)*ninv[mod%i])%mod finv[i] = finv[i-1]*ninv[i]%mod def binom(n,k): if n<0 or k<0: return 0 if k>n: return 0 return (fac[n]*finv[k]%mod)*finv[n-k]%mod def nPk(n,k): return fac[n]*finv[n-k]%mod def solve(): N = II() # dp[i][j] := 席 0...i で,iに人が座り,合計人数 j で座る場合の数(順不同) dp = [[0]*(N+1) for _ in range(N)] dp[0][1] = 1 if 1<N: dp[1][1] = 1 for i in range(2, N): for j in range(2, N+1): if i-2>=0: dp[i][j] += dp[i-2][j-1] if i-3>=0: dp[i][j] += dp[i-3][j-1] dp[i][j] %= mod ans = 0 for i in range(N+1): if dp[-1][i]>0: res = 1 res = fac[i]*fac[N-i]%mod res = res*dp[-1][i]%mod ans = (ans + res)%mod if N>1 and dp[-2][i]>0: res = 1 res = fac[i]*fac[N-i]%mod res = res*dp[-2][i]%mod ans = (ans + res)%mod print(ans) return def main(): T = 1 for _ in range(T): solve() return if __name__ == '__main__': main()