C - Stacking Zabuton
Ceylon
2
s
1024
MB
100
点
問題文
白い座布団が $N$ 枚、赤い座布団が $M$ 枚あります。これらのすべての座布団を下から $1$ 枚ずつ上に重ねて積む方法であって、以下の条件を満たす積み方の数を $998244353$ で割ったあまりを求めてください。
ただし、 $2$ つの座布団の積み方が異なるとは、ある整数 $i$ ($1\leq i\leq N+M$) が存在して、下から $i$ 枚目に積まれた座布団の色が異なることとします。
条件
- 座布団を積んでいる途中のいかなる時点でも、積まれた座布団の上から $3$ 枚(積まれた座布団が $3$ 枚未満なら積まれた座布団すべて)のうち、赤い座布団が $K$ 枚以下である。
制約
- $0 \leq N,M \leq 100{,}000$
- $3 \leq N+M$
- $0 \leq K \leq 3$
- 入力はすべて整数
入力
$N$ $M$ $K$
出力
条件を満たす座布団の積み方の数を $998244353$ で割ったあまりを、 $1$ 行に出力してください。
入力例 1
3 0 0
出力例 1
1
白い座布団が $3$ 枚あり、赤い座布団はありません。
これらをすべて積み上げる方法は $1$ 通りしかありませんが、その積み方は「途中のいかなる時点でも上から $3$ 枚のうち赤い座布団は $0$ 枚以下である」という条件を満たします。
入力例 2
4 1 1
出力例 2
5
白い座布団が $4$ 枚、赤い座布団が $1$ 枚あります。
異なる積み上げ方は $5$ 通りあります。
$K=1$ ですが、赤い座布団が全体で $1$ 枚であるため、すべての積み方が条件を満たします。
入力例 3
1000 1000 2
出力例 3
86434105
入力例 4
1000 1000 3
出力例 4
472799582