Gym-103855M Short Question

Gym-103855M Short Question

Gym | Virtual Judge

tag: 排序,切比雪夫距离

给定两个长度为 \(N\) 的整数序列 \(p\)\(q\),求:

\[\sum_{i=1}^N\sum_{j=1}^N\min\{|p_i-p_j|,|q_i-q_j|\}. \]

\(1\le N\le10^6\)\(1\le p_i,q_i\le10^6\)

由于 \(\min\{a,b\}=a+b-\max\{a,b\}\),而 \(\max\{|p_i-p_j|,|q_i-q_j|\}\) 为点 \((p_i,q_i)\) 和点 \((p_j,q_j)\) 的 Chebyshev 距离。

一个 结论 是,将坐标系中的点 \((x,y)\) 变为 \(\left(\dfrac{x+y}2,\dfrac{x-y}2\right)\),则新坐标系中的 Manhattan 距离即为原坐标系中的 Chebyshev 距离。

\(x_i=\dfrac{p_i+q_i}2,y_i=\dfrac{p_i-q_i}2\),则

\[\begin{aligned} \sum_{i=1}^N\sum_{j=1}^N\max\{|p_i-p_j|,|q_i-q_j|\}&=\sum_{i=1}^N\sum_{j=1}^N(|x_i-x_j|+|y_i-y_j|)\\ &=\sum_{i=1}^N\sum_{j=1}^N|x_i-x_j|+\sum_{i=1}^N\sum_{j=1}^N|y_i-y_j|. \end{aligned} \]

考虑如何求出 \(calc(p)=\displaystyle\sum_{i=1}^N\sum_{j=1}^N|p_i-p_j|\)。将 \(p\) 按从小到大排序,并规定 \(i<j\),从而把绝对值符号去掉,变为 \(2\displaystyle\sum_{i=1}^N\sum_{j=i+1}^N(p_j-p_i)\)

考虑每个 \(p_k\) 的贡献,作为 \(j\) 被加了 \(k-1\) 次,作为 \(i\) 被减了 \(N-k\) 次,故答案变为 \(2\displaystyle\sum_{k=1}^N(2k-1-N)p_k\)

故答案为 \(calc(p)+calc(q)-calc(x)-calc(y)\)

为了防止出现小数,实现时先令 \(x'=2x,y'=2y\),则 \(calc(x)=\dfrac12calc(x'),calc(y)=\dfrac12calc(y')\)

Source code - Virtual Judge

posted @ 2025-09-03 18:54  f2021ljh  阅读(13)  评论(0)    收藏  举报