《P2415 集合求和》
题目描述
给定一个集合 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,s 所有子集元素之和 ≤1018。
代码实现:
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define int long long
const int max_size=200020;
int array[max_size];
int count_num;
int result;
int fast_power(int base,int exponent){
int product=1;
while(exponent){
if(exponent&1) product=product*base;
base=base*base;
exponent>>=1;
}
return product;
}
signed main(){
while(cin>>array[++count_num]);
for(int i=1;i<count_num;i++){
result+=(fast_power(2,count_num-2)*array[i]);
}
cout<<result<<'\n';
return 0;
}