Simple Sum of Products

2 secs 1024 MB
OxOmiso's icon OxOmiso

この問題は,以下のように考えられます。

  1. N=a=1n1b=a+1nabN = \sum_{a=1}^{n-1}\sum_{b=a+1}^{n}ab を計算する。

  2. a=1n1b=a+1mab\sum_{a=1}^{n-1}\sum_{b=a+1}^{m}ab を計算し,NN から引く。

  3. m+1m+1 から nn までの等差数列の和を AA とし,11 から m1m-1 までの等差数列の和を BB とし,NN からさらに,ABA*B を引く。

これで手に入る NN の値が答えになります。手順1~3は,足される積を三角形状に書き出すと分かりやすいと思います。(?)

なお,手順1~3は愚直にやってはTLに間に合いません。一ケースあたり,O(nm)O(nm) はかかります。

しかし,手順1の NN の値は, 124n(n1)(n+1)(3n+2)\frac{1}{24}n(n-1)(n+1)(3n+2) で表されることを利用し,O(1)O(1) で求められます。(証明略)

手順2でも同様にして NN から引き,手順3でも等差数列の和の公式を用いることで,計算量を削減でき,AC することができます。

modであまりをとる際や,オーバーフローに十分注意してください。