洛谷笔记 - P2415 集合求和

有一说一,数学不好发现不出来规律的,拿到这道题确实会很棘手。

比如我自己

兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有数学不会,不会就是不会,怎么学都不会。 —— Karry5307

题目描述

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

输入格式

集合中的元素(元素 1000\le 1000

输出格式

ss 所有子集元素之和。

样例 #1

样例输入 #1

1
2 3

样例输出 #1

1
10

提示

【样例解释】

子集为:,{2},{3},{2,3}\varnothing, \{ 2 \}, \{ 3 \}, \{ 2, 3 \},和为 2+3+2+3=102 + 3 + 2 + 3 = 10


【数据范围】

对于 100%100 \% 的数据,1s301 \le \lvert s \rvert \le 301si10001 \le s_i \le 1000ss 所有子集元素之和 1018\le {10}^{18}

代码部分(吐槽注意)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//P2415 集合求和
//https://www.luogu.com.cn/problem/P2415

//https://www.luogu.com.cn/record/87862669
//https://www.luogu.com.cn/record/87862695

#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n=0,h=0,tmp;
while(cin>>tmp){
h+=tmp;
n++;
}
long long int ans=h*pow(2,n-1); //这一行必须指定
cout<<ans<<endl; //上面那行不指定变量而直接用cout输出会喜提科学计数法输出结果一行
//printf("%lld\n",ans); //而在printf里试图直接输出h*pow(2,n-1)则会喜提249644974080变4777492371896008704的绝佳答案
//c++,很神奇吧
return 0;
}