本来解きたかったのは AtCoder のこの問題です。

https://atcoder.jp/contests/arc107/tasks/arc107_b

解説 PDF も YouTube 解説もありますが、基礎というか前半部分で実装する x + y =k は頻出かなと思ったのでメモを残します。

問題文

\(x, y, k \in \mathbb{Z}\) が \(a \leq x \leq b, \quad c \leq y \leq d\)を満たし、\(k\)を任意の定数としたとき、\(x + y = k\)となる場合の数を求めよ

解説

2つの数直線を縦で足し合わせると常に\(k\)となるように噛み合わせる。

x の数直線は右が正、y の数直線は左が正となることに注意する。

以下のように色付けされた場所の長さが、求めたい場合の数である。

色付けされた部分の左側を\(l\)、右側を\(r\)とすると、

$$ \begin{eqnarray*} l &=& \text{max}(a, k-d)\\ r &=& \text{min}(b,k-c)\\ \end{eqnarray*} $$

\(l,r\)自身をあわせた範囲が答になるので、

$$r - (l - 1) = \text{min}(b, k-c) - \text{max}(a, k-d) + 1$$