洛谷P2415题解

分析

题意:给定一个包含不超过 3030 个元素的集合,求所有子集的元素之和。例如,集合 {2,3}\{2,3\} 的所有子集为 ,{2},{3},{2,3}\varnothing, \{ 2 \}, \{ 3 \}, \{ 2, 3 \},其元素和为 2+3+2+3=102+3+2+3=10

通过观察可以发现,每个元素在所有子集中出现的次数是相同的。

对于一个大小为 nn 的集合,每个元素出现的次数为 2n12^{n-1}。例如,集合 {2,3}\{2,3\} 中,元素 2233 各出现 22221=22^{2-1}=2

所以所有子集的元素之和为 (i=1nai)×2n1\left( \sum_{i=1}^{n} a_i \right) \times 2^{n-1}

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[30];
signed main() {
int cnt = 0, sum = 0;
while (cin >> a[cnt]) {
sum += a[cnt];
cnt++;
}
int mul = 1;
for (int i = 1; i < cnt; i++) mul *= 2;
cout << sum * mul;
return 0;
}

洛谷P2415题解
https://lijingshu2014.github.io/2025/10/03/洛谷P2415题解/
作者
lijingshu
发布于
2025年10月3日
许可协议