東京農工大学MCCプログラミングコンテスト2023Winter
コンテスト日時
2024/03/25 (Mo) 20:00 - 22:00

F - Range Sum Equals S

Ceylon
2
s
1024
MB
150

問題文

正の整数 $N, M, S$ が与えられます。

長さ $N$ の数列 $A = (A_1, A_2, \dots, A_N)$ に対して条件を以下のように定めます。

条件

  • どの連続する $M$ 項の和も $S$ に等しい。より厳密には、すべての $1 \le i \le N - M + 1$ について、$\displaystyle \sum_{j=i}^{i +M - 1}{A_j} = S$ を満たす。
  • すべての $1 \le i \le N$ について、$A_i \ge 1$
  • すべての $1 \le i \le N$ について、$A_i$ は整数

条件をすべて満たす長さ $N$ の数列がいくつあるかを $998244353$ で割ったあまりを求めてください。

制約

Hard (50点)

  • $1 \le N, S \le 10^9$
  • $1 \le M \le \min(N, 10^5)$
  • 入力はすべて整数

Easy (100点)

  • Hardの制約に以下の制約を追加
  • $1 \le N, M, S \le 100$

入力

入力は以下の形式で標準入力から与えられる。

$N \ \ M \ \ S$

出力

答えを出力せよ。

入力例 1
3 2 4
出力例 1
3

$N = 3, \ M = 2, \ S = 4$ である場合、条件を満たす数列は $(1, 3, 1), (2, 2, 2), (3, 1, 3)$ の $3$ つが存在します。

この入力例は Easy・Hard の制約を満たします。

入力例 2
5 4 3
出力例 2
0

条件を満たす数列が存在しない場合もあります。

この入力例は Easy・Hard の制約を満たします。

入力例 3
1000000000 100000 987654321
出力例 3
387997341

$998244353$ で割ったあまりを出力してください。

この入力例は Hard の制約を満たします。

提出
C++23 (g++ 12.2.0)