【深基7.习6】集合求和 · 教师题解

【深基7.习6】集合求和

解题思路

设集合有 n 个元素,元素和为 sum。每个元素会出现在恰好 2^(n-1) 个子集中,所以答案为 sum×2^(n-1)。输入没有元素个数,读到文件结束。

正确性说明

固定一个元素必须选,其余 n-1 个元素各有选或不选两种状态,共 2^(n-1) 种;逐元素累加贡献即可。

易错点

不能把第一个数当 n;用 long long 保存总和;空集贡献为 0。

复杂度

时间 O(n),空间 O(1)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    long long x, sum = 0;
    int n = 0;
    while (cin >> x) {
        sum += x;
        n++;
    }
    cout << (n ? sum * (1LL << (n - 1)) : 0) << "\n";
    return 0;
}
返回题目