1 条题解

  • 0
    @ 2020-11-3 23:59:58

    【深基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;
    }
    
    • 1