#4718. AT_abc014_2 [ABC014B] 価格の合計
AT_abc014_2 [ABC014B] 価格の合計
题目描述
你正在购物,从商品列表中选取了一些商品。现在,你需要计算这些商品的总价格。
顺便一提,有一种方法可以用二进制来表示某个集合的任意子集,这种方法常用于用 for 循环枚举所有子集(组合)时。
-
假设有 个商品,分别为商品 、商品 、……、商品 。请注意,商品编号从 开始。
-
用十进制整数 表示一个子集,其 位二进制表示为 。其中 是最低位, 是最高位。请注意,这种表示允许前导 。
然后,利用这个整数 的二进制表示,可以如下定义一个子集:
-
如果 ,则集合包含商品 ;如果 ,则集合不包含商品 。
-
如果 ,则集合包含商品 ;如果 ,则集合不包含商品 。
-
...
-
如果 ,则集合包含商品 ;如果 ,则集合不包含商品 。
例如,当 时,,对应的子集为 。简而言之,在 的二进制表示中,第 位()为 时,表示包含第 个商品。是否包含某一位可以通过大多数编程语言轻松判断,请自行查阅相关方法。
你的任务是:给定商品数量、每个商品的价格,以及表示子集的十进制整数 ,计算该子集中所包含商品的总价格。
※本题虽然与此无关,但通过上述方法可以用 到 的连续整数表示大小为 的集合的所有子集(包括空集),在需要全枚举时可以加以应用。
输入格式
输入通过标准输入给出,格式如下:
...
-
第 行包含商品数量 和表示商品子集的十进制整数 ,两者以空格分隔。
-
第 行包含商品 到 的价格 $a_0,a_1,\ldots,a_{n-1}\ (0\leq a_0,a_1,\ldots,a_{n-1}\leq 1,000)$,按顺序以空格分隔。
输出格式
- 输出子集中所包含商品的总价格,输出一行,末尾需换行。
输入输出样例 #1
输入 #1
4 5
1 10 100 1000
输出 #1
101
输入输出样例 #2
输入 #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
输入输出样例 #3
输入 #3
4 0
1000 1000 1000 1000
输出 #3
0
说明/提示
样例解释 1
和 与题目描述中的示例一致。子集为 ,因此 。
样例解释 2
的二进制表示为 (共 个 ),因此子集包含所有商品。
样例解释 3
子集也可能为空集。
由 ChatGPT 4.1 翻译