二进制增量
题目描述
Y 同学正在研究二进制数的性质。他得到了一个初始正整数 以及一个操作次数 。
接下来,Y 同学需要依次进行 次操作。在第 次操作中,给定一个正整数 ,Y 同学需要找到一个最小的非负整数 ,使得 的二进制表示中,从右往左数的第 位(最低位为第 位,即 位)是 。
找到这个 后,Y 同学需要将 更新为 (即 ),以便进行后续的操作。
Y 同学想要知道,这 次操作中所有找到的 之和是多少。
注意:
- 每次操作都会永久改变 的值。
- 第 位对应的值为 。
输入格式
第一行包含两个整数 和 ,分别表示初始整数和操作次数。 接下来 行,每行包含一个正整数 ,表示本次操作的目标是让第 位变为 。
输出格式
输出一行一个整数,表示所有操作中 的总和。
样例
样例输入 #1
5 3
2
3
4
样例输出 #1
3
数据范围与约定
对于 的数据,保证 ,,。
提示:在操作过程中, 的值可能会超过 ,同时也请注意答案累加可能产生的溢出,建议使用 64 位整数(如 C++ 中的 unsigned long long)进行存储。
| 子任务编号 | 分值 | |||
|---|---|---|---|---|
| 1 | 10 | |||
| 2 | 20 | |||
| 3 | ||||
| 4 | ||||
| 5 | 30 |
相关
在下列比赛中:
京公网安备11010802045784号