#6651. 数学巧思(math)

数学巧思(math)

数学巧思(math)

题目描述

小明最近在学习《计算机组成原理》,了解到计算机中的数字通常以二进制形式存储。于是,他想到一个有趣的数学问题。

给定一个二进制整数 xx,可以对它的二进制表示进行以下两种操作:

  • 操作 1:选择 xx 的任意一个二进制位,如果该位是 00,则将其变为 11(最多进行 aa 次)。
  • 操作 2:选择 xx 的任意一个二进制位,如果该位是 11,则将其变为 00(最多进行 bb 次)。

在最多进行 aa 次操作 1 和 bb 次操作 2 后,如何调整 xx 的二进制位,使得最终 xx 的十进制值最大?

注意:本题中二进制数的最高位不代表符号位。

输入格式

输入数据共两行。

第一行输入三个整数 nnaabb

  • nn 表示二进制数 xx 的位数;
  • aa 表示最多可以进行 aa 次操作 1;
  • bb 表示最多可以进行 bb 次操作 2。

第二行输入一个长度为 nn 的二进制整数 xx

输出格式

输出一行一个整数,表示经过最多 aa 次操作 1 和 bb 次操作 2 后,xx 在十进制下的最大值。

样例 1

输入

5 10 3
11111

输出

31

说明

什么操作也不用做。

因为原数已经全部由 11 组成,任何操作都会使其变小,因此最大值为 3131

样例 2

输入

3 1 2
100

输出

6

数据范围与约定

对于 3030% 的数据:

1n31 \le n \le 3 0a30 \le a \le 3 0b30 \le b \le 3

对于 100100% 的数据:

1n201 \le n \le 20 0a200 \le a \le 20 0b200 \le b \le 20