网格点对曼哈顿距离和
\(n\times n\) 网格中 \(\frac{n^2(n^2-1)}{2}\) 对点对曼哈顿距离之和。
\(O(n)\) 的计算属实是复杂了 /jk。
考虑计算每个点到其左上角的点(\(x1\le x,y1\le y\))的曼哈顿距离之和 \(f_{x,y}\)。
则 \(f_{x,y}=f_{x-1,y-1}+2(x-1)(y-1)+\frac{x(x-1)}{2}+\frac{y(y-1)}{2}\)。
根据递推式得到每个 \((x,y)\) 会对所有 \(f\) 的和贡献:
\((2xy+\frac{x(x-1)}{2}+\frac{y(y-1)}{2})\cdot\min(n-x,n-y)+\frac{x(x-1)}{2}+\frac{y(y-1)}{2}\)。
考虑钦定 \(x>y\),则 \((2xy+\frac{x(x-1)}{2}+\frac{y(y-1)}{2})\cdot\min(n-x,n-y)=(2xy+\frac{x(x-1)}{2}+\frac{y(y-1)}{2})\cdot(n-x)\)。
因为 \(\frac{y(y-1)}{2}\) 与 \(x\) 无关,先算出该项。
\(\sum_{y=1}^{x-1}\frac{y(y-1)}{2}=\frac{1}{2}\sum_{y=1}^{x-1} y^2-y \\=\frac{1}{2}(\sum_{y=1}^{x-1}y^2-\sum_{y=1}^{x-1}y) \\=\frac{1}{2}(\frac{x(x-1)(2x-1)}{6}-\frac{x(x-1)}{2}) \\=\frac{1}{2}\cdot\frac{x(x-1)(x-2)}{3} \\=\frac{x(x-1)(x-2)}{6}\)
还有后面一部分 \(\sum_{x=1}^n\sum_{y=1}^{x-1} \frac{x(x-1)}{2}+\frac{y(y-1)}{2}=\sum_{x=1}^n \frac{x(x-1)^2}{2}+\frac{x(x-1)(x-2)}{6}\)
\(sum=\sum_{x=1}^n \frac{x(x-1)^2}{2}+\frac{x(x-1)(x-2)}{6}+(n-x)x(x-1)(x+\frac{x-1}{2}+\frac{x-2}{6}) \)
同理可得 \(x<y\) 的情况。
若 \(x=y\) 贡献为:
\(\sum_{x=1}^n (2x^2+x(x-1))(n-x)+x(x-1)\)
由此可以计算出 \(f\) 的和 \(S=2\cdot sum+\sum_{x=1}^n (2i^2+i(i-1))(n-i)+i(i-1)\)。
因为是无序对,所以最终结果应该是 \(2S-2n\sum_{i=1}^n \frac{i(i-1)}{2}\)。
\(2S\) 是算上每个点到其右上角的曼哈顿距离之和。后面减的部分是因为每个点正上方算了 2 次,而水平方向上两个点互相计算一次也会算重一次。这样可以做到 \(O(n)\) 计算。
上 面 的 根 本 不 是 人 类 能 化 简 的,蠢完了。换一种思路,考虑横纵坐标的贡献分开算。
\(ans=2n^2\sum_{i=1}^n\sum_{j=i+1}^n j-i \\=2n^2\sum_{i=1}^n\frac{(i+1+n)(n-i)}{2}-i\cdot(n-i) \\=2n^2\sum_{i=1}^n (n-i)(\frac{i+1+n}{2}-i) \\=2n^2\sum_{i=1}^n \frac{n+1-i}{2}(n-i) \\=n^2\sum_{i=1}^n n^2+n-2ni-i+i^2 \\=n^5+n^4-2n^3\frac{n(1+n)}{2}-n^2\frac{n(1+n)}{2}+n^2\frac{n(n+1)(2n+1)}{6} \)

浙公网安备 33010602011771号