TB椰程 TypeBuddy 打字搭子

集合求和

洛谷·深入浅出 · 代码 · cpp · 难度 2/5 · 共 403 字

所有子集元素之和 = 元素总和 * 2^(n-1)

  • 洛谷
  • 练习

正文

// 原题:https://oj.yecheng.tv/p/1441)
// 题意:给定一个集合,求它所有子集的元素之和。
// 思路:每个元素会出现在 2^(n-1) 个子集中,故总和 = 全部元素和 * 2^(n-1);用 long long 防溢出。
// 复杂度:O(n)。
// 易错点:结果可能很大(<=1e18)要用 long long;无需真的枚举子集。
#include <iostream>
using namespace std;
int main(){
    long long x, sum = 0;
    int n = 0;
    while(cin >> x){ sum += x; n++; }
    long long ans = sum * (1LL << (n - 1));
    cout << ans << endl;
    return 0;
}

洛谷·深入浅出的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK