#2946. Change a Little Bit

0

Change a Little Bit

Change a Little Bit

题目描述

对于两个由 00 和 11 组成且长度为 NN 的序列 SS 和 TT,定义 f(S,T)f(S, T) 如下:

考虑对 SS 反复进行以下操作直到 SS 等于 TT。f(S,T)f(S, T) 是这些操作的最小可能总代价。

改变 SiS_i(从 00 变为 11 或反之)。此操作的代价是 D×CiD \times C_i,其中 DD 是在该次改变之前满足 Sj≠Tj (1≤j≤N)S_j \neq T_j\ (1 \leq j \leq N) 的整数 jj 的个数。

共有 2N×(2N−1)2^N \times (2^N - 1) 对不同的长度为 NN 的由 00 和 11 组成的序列 (S,T)(S, T)。计算对所有这些序列对 f(S,T)f(S, T) 的和,对 (109+7)(10^9+7) 取模。

输入格式

输入以标准输入给出,格式如下: NN C1C_1 C2C_2 ⋯\cdots CNC_N

输出格式

输出对所有 f(S,T)f(S, T) 的和,对 (109+7)(10^9+7) 取模。

1
1000000000
999999993
2
5 8
124
5
52 67 72 25 79
269312

提示

1≤N≤2×1051 \leq N \leq 2 \times 10^5 1≤Ci≤1091 \leq C_i \leq 10^9 输入中的所有数值均为整数。长度为 22 的由 00 和 11 组成的不同序列对有两对,如下:

S=(0),T=(1):S = (0), T = (1): 将 S1S_1 改为 11 即可使 S=TS = T,代价为 10000000001000000000,因此 f(S,T)=1000000000f(S, T) = 1000000000。 S=(1),T=(0):S = (1), T = (0): 将 S1S_1 改为 00 即可使 S=TS = T,代价为 10000000001000000000,因此 f(S,T)=1000000000f(S, T) = 1000000000。

它们的和为 20000000002000000000,对 (109+7)(10^9+7) 取模后为 999999993999999993。
长度为 33 的不同序列对共有 1212 对,其中包括:

S=(0,1),T=(1,0)S = (0, 1), T = (1, 0)

在这种情况下,如果我们先把 S1S_1 改为 11 然后把 S2S_2 改为 00,总代价为 5×2+8=185 \times 2 + 8 = 18。不能以更小的代价使 S=TS = T,所以 f(S,T)=18f(S, T) = 18.

标签: AtCoder|abc150E

来源

AtCoder|abc150E