CF1513E Cost Equilibrium

题目描述

如果一个数组的所有元素都相等,则称该数组为美丽数组。 你可以对一个数组进行如下操作任意次: 1. 选择两个下标 $i$ 和 $j$($1 \leq i, j \leq n$),以及一个整数 $x$($1 \leq x \leq a_i$)。令 $i$ 为源下标,$j$ 为汇下标。 2. 将第 $i$ 个元素减少 $x$,将第 $j$ 个元素增加 $x$。操作后,第 $i$ 个和第 $j$ 个元素分别变为 $a_i - x$ 和 $a_j + x$。 3. 此操作的代价为 $x \cdot |j - i|$。 4. 此后,第 $i$ 个下标不能再作为汇点,第 $j$ 个下标不能再作为源点。 一次变换的总代价为所有操作代价之和。例如,数组 $[0, 2, 3, 3]$ 可以通过代价 $1 \cdot |1-3| + 1 \cdot |1-4| = 5$ 变换为美丽数组 $[2, 2, 2, 2]$。 如果一个数组可以被变换为美丽数组,并且这种变换的总代价是唯一确定的(即变换为美丽数组的最小代价等于最大代价),则称该数组为平衡数组。 给定一个长度为 $n$ 的非负整数数组 $a_1, a_2, \ldots, a_n$,你的任务是求出有多少个平衡数组是该数组的排列。若两个数组在某些位置的元素不同,则认为它们不同。由于答案可能很大,请输出对 $10^9 + 7$ 取模的结果。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^5$)——数组的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq 10^9$)。

输出格式

输出一个整数,表示平衡排列的数量,对 $10^9+7$ 取模。

说明/提示

在第一个样例中,$[1, 2, 3]$ 是一个有效的排列,因为我们可以将值为 $3$ 的下标作为源点,值为 $1$ 的下标作为汇点。这样变换后可以得到美丽数组 $[2, 2, 2]$,总代价为 $2$。可以证明这是唯一能将该数组变为美丽数组的变换。同理,可以检查其他排列。 在第二个样例中,$[0, 0, 4, 4]$ 和 $[4, 4, 0, 0]$ 都是平衡排列。 在第三个样例中,所有排列都是平衡的。 由 ChatGPT 4.1 翻译