AT_abc014_2 [ABC014B] 価格の合計

题目描述

你正在购物,从商品列表中选取了一些商品。现在,你需要计算这些商品的总价格。 顺便一提,有一种方法可以用二进制来表示某个集合的任意子集,这种方法常用于用 for 循环枚举所有子集(组合)时。 - 假设有 $n$ 个商品,分别为商品 $0$、商品 $1$、……、商品 $n-1$。请注意,商品编号从 $0$ 开始。 - 用十进制整数 $X$ 表示一个子集,其 $n$ 位二进制表示为 $b_{n-1}b_{n-2}\ldots 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$ 位($0\leq k\leq n-1$)为 $1$ 时,表示包含第 $k$ 个商品。是否包含某一位可以通过大多数编程语言轻松判断,请自行查阅相关方法。 你的任务是:给定商品数量、每个商品的价格,以及表示子集的十进制整数 $X$,计算该子集中所包含商品的总价格。 ※本题虽然与此无关,但通过上述方法可以用 $0$ 到 $2^n-1$ 的连续整数表示大小为 $n$ 的集合的所有子集(包括空集),在需要全枚举时可以加以应用。

输入格式

输入通过标准输入给出,格式如下: > $n$ $X$ $a_0$ $a_1$ $a_2$ ... $a_{n-1}$ - 第 $1$ 行包含商品数量 $n\ (1\leq n\leq 20)$ 和表示商品子集的十进制整数 $X\ (0\leq X\leq 2^n-1)$,两者以空格分隔。 - 第 $2$ 行包含商品 $0$ 到 $n-1$ 的价格 $a_0,a_1,\ldots,a_{n-1}\ (0\leq a_0,a_1,\ldots,a_{n-1}\leq 1,000)$,按顺序以空格分隔。

输出格式

- 输出子集中所包含商品的总价格,输出一行,末尾需换行。

说明/提示

### 样例解释 1 $n$ 和 $X$ 与题目描述中的示例一致。子集为 $\{商品0, 商品2\}$,因此 $1+100=101$。 ### 样例解释 2 $X$ 的二进制表示为 $11111111111111111111$(共 $20$ 个 $1$),因此子集包含所有商品。 ### 样例解释 3 子集也可能为空集。 由 ChatGPT 4.1 翻译