集合求和#洛谷

题目描述

给定一个集合 s s s(集合元素数量 ≤ 30 \le 30 30),求出此集合所有子集元素之和。

输入格式

集合中的元素(元素 ≤ 1000 \le 1000 1000

输出格式

s s s 所有子集元素之和。

样例 #1

样例输入 #1

2 3

样例输出 #1

10

提示

【样例解释】

子集为: ∅ , { 2 } , { 3 } , { 2 , 3 } \varnothing, \{ 2 \}, \{ 3 \}, \{ 2, 3 \} ,{2},{3},{2,3},和为 2 + 3 + 2 + 3 = 10 2 + 3 + 2 + 3 = 10 2+3+2+3=10


【数据范围】

对于 100 % 100 \% 100% 的数据, 1 ≤ ∣ s ∣ ≤ 30 1 \le \lvert s \rvert \le 30 1s30 1 ≤ s i ≤ 1000 1 \le s_i \le 1000 1si1000 s s s 所有子集元素之和 ≤ 10 18 \le {10}^{18} 1018

data = list(map(int, input().split()))
length = len(data)
summ = sum(data)
key=2**(length-1)
print(summ*key)

写几个不同数量的集合,把子集都列出来,数数每个数出现的次数,最后可以得出规律:每个数都出现2^(n-1)次,所以计算出集合的和再乘次数即可

你可能感兴趣的:(洛谷题单,算法,数据结构)