在Python中查找给定数组的所有子数组总和的2次幂总和的程序

假设我们有一个列表 A。我们已经获取了 A 的所有非空子列表,因为我们知道具有 n 个元素的列表 l 具有 (2n - 1) 个非空子列表。现在对于每个子列表,他计算 sublist_sum(元素的总和并用 S 1 , S 2 , S 3 , ... , S (2N-1) 表示)。有一个特殊和 P 使得 P = 2 S1 + 2 S2 +2 S3 .... + 2 S(2N-1)。我们必须找到 P。如果 P 太大,则返回 P mod (10^9 + 7)。

所以,如果输入像 A = [2,2,3],那么输出将是

  • {2} 所以 2^2 = 4

  • {2} 所以 2^2 = 4

  • {3} 所以 2^3 = 8

  • {2,2} 所以 2^4 = 16

  • {2,3} 所以 2^5 = 32

  • {2,3} 所以 2^5 = 32

  • {2,2,3} 所以 2^7 = 128

总和是 4 + 4 + 8 + 16 + 32 + 32 + 128 = 224

示例

让我们看看以下实现以获得更好的理解 -

def solve(A):
   ans=1
   m=10**9+7

   for el in A:
      ans *= (1+pow(2,el,m))
      ans %= m
   return (m+ans-1) % m


A = [2,2,3]
print(solve(A))

输入

[2,2,3]
输出结果
224

猜你喜欢