package main import . "fmt" const MOD = 998244353 func main() { var n,m int Scan(&n,&m) if n > m { Println(1) return } dp := make([]int, m+1) dp[0] = 1 for i := 0; i < m; i++ { if i+n < len(dp) { dp[i+n] = (dp[i+n]+dp[i])%MOD } dp[i+1] = (dp[i+1]+dp[i])%MOD } Println(dp[m]) } /* 考察 NもMも最大10^9だと勘違いして考察してて解法わからん、となっていたが 誤読でありMは最大10^6だった これだったら普通にDP DP[x+N] += DP[x] DP[x+1] += DP[x] 位置x時点までの組み合わせから パーツN個まとめて横に積んで使う or パーツ1個縦のまま使う をやるだけ なお N > M ならパーツ全部を縦に積めるだけの1通り */