結果

問題 No.1887 K Consecutive Ks (Easy)
コンテスト
ユーザー LyricalMaestro
提出日時 2025-11-25 00:27:27
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 569 ms / 2,000 ms
コード長 1,140 bytes
コンパイル時間 298 ms
コンパイル使用メモリ 82,068 KB
実行使用メモリ 206,764 KB
最終ジャッジ日時 2025-11-25 00:27:33
合計ジャッジ時間 5,811 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

## https://yukicoder.me/problems/no/1887

MOD = 998_244_353

def main():
    N, M = map(int, input().split())

    cum_dp = [[0] * (M + 1) for _ in range(N + 1)]
    total_cum_dp = [0 for _ in range(N + 1)]
    dp = [[0] * (M + 1) for _ in range(N + 1)]

    dp[0][0] = 1
    cum_dp[0][0] = 1
    total_cum_dp[0] = 1

    for i in range(N):

        for m in range(2, M + 1):
            a = (total_cum_dp[i] - total_cum_dp[i - (m - 1)]) if i - (m - 1) >= 0 else total_cum_dp[i] 
            a %= MOD
            b = (cum_dp[i][m] - cum_dp[i - (m - 1)][m]) if i - (m - 1) >= 0 else cum_dp[i][m]
            b %= MOD
            c = (a - b) % MOD
            dp[i + 1][m] = c
        
        total_cum_dp[i + 1] = total_cum_dp[i]
        for m in range(M + 1):
            cum_dp[i + 1][m] = (cum_dp[i][m] + dp[i + 1][m]) % MOD
            total_cum_dp[i + 1] += dp[i + 1][m]
            total_cum_dp[i + 1] %= MOD
    
    ans = 0
    for m in range(M + 1):
        ans += dp[N][m]
        ans %= MOD
    
    answer = pow(M, N, MOD)
    answer -= ans
    answer %= MOD
    print(answer)






    



if __name__ == "__main__":
    main()
0