ARC106-D Powers を直感的に解く

今更ですが、ARC106-D Powers の簡単な解説を書きます。

問題リンク:

atcoder.jp

問題概要:

長さ N の数列 \{A_i\} がある。 1 \leq X \leq K それぞれについて、

\displaystyle{
\left( \sum_{i \lt j} (A_i+A_j)^X \right) \ {\rm mod} \ 998244353
}
を求めよ。
1 \leq N \leq 2 \times 10^5
1 \leq K \leq 300
1 \leq A_i \leq 10^8

解法:

対称性から \displaystyle{\sum_{i \lt j} (A_i+A_j)^X = \frac{1}{2} \sum_{i \neq j} (A_i+A_j)^X} なので、これを求めます。(こちらの方が後の計算が楽です。)
まず括弧の中を展開すると、


\begin{aligned}
\sum_{i \neq j} (A_i+A_j)^X
&= \sum_{i \neq j} \left(\binom{X}{0} A_i^X + \binom{X}{1} A_i^{X-1} A_j + \cdots + \binom{X}{X} A_j^X \right) \\
&= \binom{X}{0} \sum_{i \neq j}  A_i^X + \binom{X}{1} \sum_{i \neq j}  A_i^{X-1} A_j + \cdots +\binom{X}{X}  \sum_{i \neq j}  A_j^X
\end{aligned}

となります。
二項係数は高速に前計算できるので、\displaystyle{ \sum_{i \neq j} A_i^k A_j^l \ (0 \leq k,l \leq K)} が高速に求まればよいです。


突然ですが、次のような長方形を考えてみましょう。


f:id:null_mn:20201030061131p:plain


すると、 \displaystyle{ \sum_{i \neq j} A_i^k A_j^l} は次の赤い部分の面積に一致します。


f:id:null_mn:20201030061029p:plain


これは次の(緑の面積)-(青の面積)で求まります。


f:id:null_mn:20201030061149p:plain

f:id:null_mn:20201030061141p:plain


緑の面積は  (A_1^k + \cdots + A_N^k)(A_1^l + \cdots A_N^l) 、青の面積は  A_1^k A_1^l + \cdots + A_N^k A_N^l で求まるので、
\displaystyle{ \sum_{i \neq j} A_i^k A_j^l = \sum_{i} A_i^k \sum_{i} A_i^l - \sum_{i} A_i^{k+l}}
が成り立つとわかります。

よって、  0 \leq k \leq K に対し  \displaystyle{\sum_{i} A_i ^k} を前計算しておくことで \displaystyle{ \sum_{i \neq j} A_i^k A_j^l} が求まり、最初の式の値も求まります。


このように二重和が登場する場面では、分割された長方形の面積を考えることで式変形を直感的に行える場合がしばしばあります。
式変形自体は特に目新しいものではないですが、「直感的にわかる」ことは発想を得る上で重要だと思うので、是非役立ててみてください。