結果
問題 |
No.2791 Beginner Contest
|
ユーザー |
|
提出日時 | 2025-08-24 17:50:25 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 947 bytes |
コンパイル時間 | 361 ms |
コンパイル使用メモリ | 82,216 KB |
実行使用メモリ | 56,804 KB |
最終ジャッジ日時 | 2025-08-24 17:50:28 |
合計ジャッジ時間 | 2,862 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | WA * 17 |
ソースコード
# DFS + メモ化で O(N) で解く版 from functools import lru_cache MOD = 998244353 def count_ways(N: int, K: int) -> int: """ f(i): ちょうど i に到達して終わる通り数(i>=0) S(x): f(0)+...+f(x) の累積和(x>=0) 目的: 答え = S(N) (どこで終わっても良い総数) ただし f(0)=1, f(1..K-1)=0, f(i)=S(i-K) (i>=K) """ @lru_cache(maxsize=None) def f(i: int) -> int: if i == 0: return 1 if i < 0: return 0 if i < K: return 0 # 漸化式: f(i) = S(i-K) return S(i - K) % MOD @lru_cache(maxsize=None) def S(x: int) -> int: if x < 0: return 0 # 累積和: S(x) = S(x-1) + f(x) return (S(x - 1) + f(x)) % MOD return S(N) % MOD # --- 使い方例 --- if __name__ == "__main__": N, K = 10, 3 print(count_ways(N, K)) # 例: 出力(法 998244353)