A. 均衡数

题目链接:P16224 [蓝桥杯 2026 省 A] 均衡数

题目描述

如果一个正整数的二进制表示中(无前导 0), 1 的数量和 0 的数量相同,则我们称其为一个“均衡数”。

现在,请你找到一个均衡数 x ,使得 |2026202620262026 - x| 的值最小。若存在多个均衡数使得差值相同且最小,则取其中最小的一个。


解题思路

我们要找一个与目标值相减绝对值最小的数。
显然我们需要找到一个比它大的最小均衡数,和一个比它小的最大均衡数,然后比较这两个数与目标值的差值。

如何寻找?

首先要看目标数的二进制位数。将 $2026202620262026$ 放入计算器,得到其二进制为:
0111001100101101001000001111011011000111011010001010
忽略前导0总共有 51 位(26 个 1,25 个 0)。

注意: 因为是奇数位,所以同位数下绝对不可能存在 0 和 1 数量相等的均衡数!

某同学因为直接用了带前导零的程序员计算器,把最前面的 0 算进去了,误以为这刚好是 52 位均衡数,痛失 5 分(雾)

既然 51 位没有均衡数,我们只能跨位数寻找:

1. 找比它大的最小均衡数(52 位)
因为不能有前导零,最高位必为 1。为了让值最小,中间要尽可能填 0,最后填 1。
所以 52 位(26 个 0,26 个 1)的最小均衡数为:
1000000000000000000000000001111111111111111111111111
转换为十进制为 A = 2251799847239679$

2. 找比它小的最大均衡数(50 位)
同理,最高位必为 1。为了让值最大,前面要尽可能填 1,最后填 0。
所以 50 位(25 个 1,25 个 0)的最大均衡数为:
11111111111111111111111110000000000000000000000000
转换为十进制为 B = 1125899873288192$

差值比对

显然,与 A 的差值更小。

最终答案

2251799847239679