#L0224. 二进制置位操作

二进制置位操作

题目描述

给定一个正整数 nn,以及操作次数 qq。对于每次操作,给出一个正整数 kk,要求:让 nn 加上一个非负整数 xx,使得 nn 在二进制下的第 kk 位(从右往左数)是 11,并在符合要求的情况下,令 xx 最小。

请注意,每次操作都会让 nn 变为 n+xn + x,会影响后续操作。

请求出所有的 xx 之和。

输入格式

输入共 q+1q + 1 行。

第一行两个整数 nnqq
接下来 qq 行,每行一个正整数 kk,表示要让 nn 在二进制下从右往左数的第 kk 位是 11

输出格式

一行一个整数,表示所有的 xx 之和。

样例

5 3
2
3
4
3

提示

样例 1 说明

55 在二进制下是 101101

  • 对于第一次操作,需要让 101101 的第二位变为 11,则需让 101101 加上 11,变为 110110
  • 对于第二次操作,需要让 110110 的第三位是 11,由于 110110 的第三位本身就是 11,所以无需改变;
  • 第三次操作同理,需要让 110110 加上 22

最终输出结果是 1+0+2=31+0+2=3

数据规模与约定

对于 100%100\% 的数据,1n<2321\le n \lt 2^{32}1q1051\le q\le 10^51k321 \le k\le 32

测试点编号$n$$q$$k$
$1$$\leq 4$$\leq 10$$\leq 2$
$2, 3$$\leq 4$$\leq 10$$\leq 32$
$4, 5$$\leq 1024$$\leq 1000$$\leq 10$
$6, 7$$\lt 2^{32}$$\leq 10$$\leq 32$
$8 \sim 10$$\lt 2^{32}$$\leq 10^5$$\leq 32$
难度 普及-
通过率
尝试 0
已通过 0
ID
952
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者