#abc0142. [abc014_2]価格の合計

[abc014_2]価格の合計

问题描述

你正在购物,从商品列表中选择了一些商品。现在,你想要计算这些商品的总价格。

顺便说一下,存在一种用二进制表示任意集合的子集合的方法,可以在列举所有子集(组合)时使用for循环。

  • 假设有 n 个商品,商品0,商品1,..,商品n-1。
  • 用十进制整数 X 表示子集,并将其二进制表示为 b_{n-1}b_{n-2}...b_1b_0。其中,b_0 是最低位,b_{n-1} 是最高位。注意,允许头部有 0。

然后,使用该整数 X 的二进制表示来定义一个子集,如下所示:

  • 如果 b_0=1,则集合包含商品0;如果 b_0=0,则集合不包含商品0。
  • 如果 b_1=1,则集合包含商品1;如果 b_1=0,则集合不包含商品1。
  • ...
  • 如果 b_{n-1}=1,则集合包含商品 n-1;如果 b_{n-1}=0,则集合不包含商品 n-1。

例如,当 n=4,X=5 时,b=0101,子集为 {商品0, 商品2}。简单地说,在 X 的二进制表示中,如果第 k(k≥0) 位为 1,则表示包含第 k 个物品。是否某个位为 1 可以在许多编程语言中轻松判断,请自行查阅。

你的任务是,给定商品的数量、每个商品的价格以及表示子集的十进制整数 X,计算子集中包含的商品的总价格。

※虽然这个问题与直接相关,但是通过上述表示子集的方法,可以用连续的整数从0到2^n-1来表示集合大小为 n 的所有子集(包括空集),在枚举时可应用此方法。


输入

输入以以下格式从标准输入中给出。

nn XX a0a_0 a1a_1 a2a_2 ... an1a_{n-1}

  • 第1行给出商品的数量 n (1 ≤ n ≤ 20) 和表示商品子集的十进制整数 X (0 ≤ X ≤ 2^{n}-1),两者之间用空格分隔。
  • 第2行给出商品0 ~ n-1 的价格 $a_0,a_1,...,a_{n-1}(0 ≤ a_0,a_1,...,a_{n-1} ≤ 1,000)$,每个价格之间用空格分隔。

输出

  • 输出部分子集包含的商品的总价格,输出末尾换行符。

输入例子1


4 5
1 10 100 1000

输出例子1


101

nnXX 是问题描述中使用的值。子集为 {商品0, 商品2},所以总价格为 1 + 100 = 101。


输入例子2


20 1048575
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

输出例子2


210

X 的二进制表示为 11111111111111111111(有20个1),所以子集包含所有商品。


输入例子3


4 0
1000 1000 1000 1000

输出例子3


0

子集也可能是空集。