有一说一,数学不好发现不出来规律的,拿到这道题确实会很棘手。
比如我自己
兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有数学不会,不会就是不会,怎么学都不会。 —— Karry5307
题目描述
给定一个集合 $s$(集合元素数量 $\le 30$),求出此集合所有子集元素之和。
输入格式
集合中的元素(元素 $\le 1000$)
输出格式
$s$ 所有子集元素之和。
样例 #1
样例输入 #1
2 3
样例输出 #1
10
提示
【样例解释】
子集为:$\varnothing, \{ 2 \}, \{ 3 \}, \{ 2, 3 \}$,和为 $2 + 3 + 2 + 3 = 10$。
【数据范围】
对于 $100 \%$ 的数据,$1 \le \lvert s \rvert \le 30$,$1 \le s_i \le 1000$,$s$ 所有子集元素之和 $\le {10}^{18}$。
代码部分(吐槽注意)
//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;
}