Change a Little Bit
题目描述
对于两个由 0 和 1 组成且长度为 N 的序列 S 和 T,定义 f(S,T) 如下:
考虑对 S 反复进行以下操作直到 S 等于 T。f(S,T) 是这些操作的最小可能总代价。
改变 Si(从 0 变为 1 或反之)。此操作的代价是 D×Ci,其中 D 是在该次改变之前满足 Sj=Tj (1≤j≤N) 的整数 j 的个数。
共有 2N×(2N−1) 对不同的长度为 N 的由 0 和 1 组成的序列 (S,T)。计算对所有这些序列对 f(S,T) 的和,对 (109+7) 取模。
输入格式
输入以标准输入给出,格式如下:
N
C1 C2 ⋯ CN
输出格式
输出对所有 f(S,T) 的和,对 (109+7) 取模。
1
1000000000
999999993
2
5 8
124
5
52 67 72 25 79
269312
提示
1≤N≤2×105
1≤Ci≤109
输入中的所有数值均为整数。长度为 2 的由 0 和 1 组成的不同序列对有两对,如下:
S=(0),T=(1): 将 S1 改为 1 即可使 S=T,代价为 1000000000,因此 f(S,T)=1000000000。
S=(1),T=(0): 将 S1 改为 0 即可使 S=T,代价为 1000000000,因此 f(S,T)=1000000000。
它们的和为 2000000000,对 (109+7) 取模后为 999999993。
长度为 3 的不同序列对共有 12 对,其中包括:
S=(0,1),T=(1,0)
在这种情况下,如果我们先把 S1 改为 1 然后把 S2 改为 0,总代价为 5×2+8=18。不能以更小的代价使 S=T,所以 f(S,T)=18.
标签: AtCoder|abc150E
来源
AtCoder|abc150E