集合求和

本题地址:http://www.luogu.org/problem/show?pid=2415

洛谷2015年8月月赛第一题

题目背景

非常抱歉该题数据有误,已更正并进行重测。注意结果范围为10^18

题目描述

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

输入输出格式

输入格式:

集合中的元素(元素<=1000)

输出格式:

输入输出样例

输入样例#1:

2 3

输出样例#1:

10

说明

子集为:
[]
[2]
[3]
[2 3]
2+3+2+3=10
保证结果在10^18以内。

思路

  写出事件的基本事件空间。以5为例,我们可以发现在有1,2,3,4,5的元素的集合中,每个数字依次出现了1,4,6,4,1次;以6为例,我们可以发现在有1,2,3,4,5,6的元素的集合中,每个数字依次出现了1,5,10,10,5,1次,正好为一个杨辉三角。(又是杨辉三角!!!)那么可以发现杨辉三角每排数字加和正好为2^n-1,那么可以用一个累加器计算n,另一个累加器计算数字综合,用快速幂求处sum*2^n-1即可。(即使开到了也只有80分)

var n,x,sum:qword;
function f(a,b:qword):qword;
var t,y:qword;
begin
    t:=1;
    y:=a;
    while b<>0 do
        begin
            if (b and 1)=1 then t:=t*y;
            y:=y*y;
            b:=b shr 1;
        end;
    exit(t);
end;
begin
    n:=0;
    sum:=0;
    while not eoln do
        begin
            read(x);
            inc(n);
            inc(sum,x);
        end;
    dec(n);
    writeln(f(2,n)*sum);
end.

时间: 2024-11-08 21:58:57

集合求和的相关文章

P2415 集合求和

P2415 集合求和显然,一共有2^n个子集,对于其中的一个确定的元素,它不在的集合有2^(n-1),相当于有n-1元素,那么它存在的集合有,2^n-2^(n-1)==2^(n-1),那么集合的和为sum*2^(n-1). 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 long long p(long long t,long long x) 5 { 6 while(x%2==0) 7 { 8 t*=t; 9 x>>=1;

洛谷 P2415 集合求和 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=2415 题目描述 给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出样例#1: 10 说明 子集为: [] [2] [3] [2 3] 2+3+2+3=10 保证结果在10^18以内. 分析: 手写容

[JZOJ P1271] [DP]集合求和

@kaike 传送门 就这么简单的题目,我交了四回? 让你用 1-n 个数看是否能组成等式 可以看出 1-n 明显是一个等差数列 恩 数列题刷的都要吐了不过不难 由求和公式Sn=n*(n+1)/2 组成等式 左边=右边=Sn/2 先判断是否有解 1 s=n*(n+1); 2 if(s%4!=0) 3 { 4 cout<<0<<endl; 5 return 0; 6 } 设边界f[0]=1 如背包问题 我知道这是一个很恶劣的词语,但是具体我还没有悟出来 f[j]=f[j]+f[j-i

sum(iterable[, start]) 对集合求和

>>> LL [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21] >>> L [3, 4, 5, 6, 7, 8, 9] >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> >>> >>> sum(L) 42 >>> sum(LL) 121 >>> sum(l) 45 >>> # 以上是求

Clojure学习03:数据结构(集合)

Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  "adadsads"] 2.list 相当于链表,如: '(2  3   5)  ,  '("ad"  "adas"  "adadsads") 与vector相比,[]变成了() ,又因为 ()符号是用于函数调用,为了区别,需要在

从零学scala(七)集合、模式匹配和样例类

一:集合 主要的集合特质 scala集合中重要的特质: Trait(Iterable) Trait(Seq) Trait(Set) Trait(Map) Trait(IndexedSeq) Trait(SoredSet) Trait(SoredMap) Seq是一个有先后次序的值的序列,比如数组和列表.IndexSeq允许我们通过下表快速访问元素,ArrayBuffer是带下标的,但是链表不是. Set是一个没有先后次序的值的序列,SortedSet中,元素以排过序的顺序被访问. Map是一组(

python基础之函数

python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定义函数. 定义一个函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数式编程和面向过程编程的区别: 函数式:将某功能代码封装到函数中,日后便无需重复编

自学Python-内置函数详解

一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii 一.数学运算类 abs(x) 求绝对值1.参数可以是整型,也可以是复数2.若参数是负数,则返回负数的模 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注意:整型.浮点型都可以 float([x]) 将一个字符串或数转换为浮点数.如果无参数将返

进击的Python【第四章】:Python的高级应用(一)

Python的高级应用(一) 本章内容: 内置函数 生成器 迭代器 装饰器 JSON和PICKLE的简单用法 软件目录结构规范 一.内置函数 1.数学运算类 abs(x) 求绝对值1.参数可以是整型,也可以是复数2.若参数是复数,则返回复数的模 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注意:整型.浮点型都可以 float([x]) 将一个字符串或数转换为浮点数.如果无参数将返回0.0 int([x[, base]])  将一个字符转换