defsolution(n: int, a: list) -> int: if n == 1: return a[0] res = 0 f = 1 # 计算 (n-2)! for i inrange(1, n - 1): f = f * i % mod for i inrange(n): res += a[i] * f * (n - 1) # a[i] * (n-1)! for j inrange(n): if i != j: # |a[i] - a[j]| * (n-2)! * (n-1) res += abs(a[i] - a[j]) * f * (n - 1) % mod return res % mod
from itertools import accumulate mod = int(1e9 + 7) defgetSumAbsoluteDifferences(nums): n = len(nums) s = list(accumulate(nums)) res = [0] * n # res[i] = 前面的个数 * cur - 前面总和 + 后面的和 - 后面个数 * cur for i, x inenumerate(nums): res[i] = (i + 1) * x - s[i] + (s[n - 1] - s[i]) - (n - i - 1) * x res[i] %= mod return res
defsolution(n: int, a: list) -> int: if n == 1: return a[0] res = 0 a.sort() dis = getSumAbsoluteDifferences(a) f = 1 # 计算 (n-2)! for i inrange(1, n - 1): f = f * i % mod for i inrange(n): res = (res + a[i] * f * (n - 1) + dis[i] * (n - 1) * f) % mod return res