0
点赞
收藏
分享

微信扫一扫

OpenLayers使用2

船长_Kevin 2024-07-24 阅读 28

题目描述

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

输入格式

集合中的元素(元素 ≤1000)

输出格式

s 所有子集元素之和。

输入输出样例

输入 #1

2 3

输出 #1

10

说明/提示

【样例解释】

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


【数据范围】

对于 100% 的数据,1≤∣s∣≤30,1≤si​≤1000,ss 所有子集元素之和≤10^18。

#include <iostream> // 包含标准输入输出流的头文件
#include <vector>   // 包含动态数组(向量)的头文件
using namespace std; // 使用标准命名空间,这样我们就不需要在每个标准库类型前加std::

int main() { // 主函数的开始
    vector<int> s; // 定义一个整数类型的动态数组s,用来存储集合中的元素
    int n, temp;  // 定义两个整数变量,n用来存储集合的大小,temp用来临时存储输入的元素

    // 循环读取输入直到输入结束
    while (cin >> temp) {
        s.push_back(temp); // 将读取的元素添加到向量s的末尾
    }

    long long sum = 0; // 定义一个长整型变量sum,用来存储所有子集元素之和,使用long long以避免溢出

    // 遍历集合中的每个元素
    for (int i = 0; i < s.size(); ++i) {
        // 对于每个元素s[i],计算其在所有子集中的总和贡献
        // 1LL << (s.size() - 1) 计算2的(s.size() - 1)次方,即除了空集外所有可能子集的数量
        // 然后将这个数乘以当前元素的值s[i],累加到sum中
        sum += (1LL << s.size() - 1) * s[i]; 
    }

    cout << sum << endl; // 输出所有子集元素之和的结果
    return 0; // 程序正常结束,返回0
}
举报

相关推荐

0 条评论