B - Sum of Three Integers Editorial by Tamiji

もっと高速な解法

\(2\) 変数の場合

整数 \((x,y)\) の組であって、 \(0\le x,y\le K\) かつ \(x+y=T\) なるものの個数を求める問題です。

\(T<0\) または \(T>2K\) のとき、答は存在しません。 \(T>K\) の場合、 \(x+y=T\iff (K-x)+(K-y)=2K-T\) より、 \(T\le K\) の問題に帰着できるので、それを仮定します。すると、 \(x+y=T\) より \((x,y)\)\((0,T),(1,T-1),...,(T,0)\) しかありえませんが、 \(T\le K\) よりこれらは全て条件を満たすので \(T+1\) 通りです。

これより一般の \(T\) の場合、答は \(\max(0,\min(T+1,2K-T+1))\) 通りです。

なぜこのようになるかの証明は省略しますが、実際に \(T\) の範囲ごとのこの式の挙動を見てみると、今までの議論と整合性がとれることがわかります。

\(3\) 変数の場合

\(z\) を動かして考えると、答えは \(\sum_{z=0}^K\max(0,\min(S-z+1,2K-S+z+1))\) です。 \(0,S-z+1,2K-S+z+1\) の大小関係を定めると、 \(z\) の取りうる値が区間になります。また、その区間内での和は等差数列の和の公式により求められます。

これより時間計算量 \(O(1)\) で求めることができました。

posted:
last update: