Type: Default 2000ms 512MiB

[R70D]溯源

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时空限制

2S/512M

题目描述

对于一个正整数 xx,定义函数 f(x)f(x) 为:

$$f(x) = \sum_{i = 0}^{\infty}\left\lfloor\frac{x}{2^i}\right\rfloor = \left\lfloor\frac{x}{2^0}\right\rfloor + \left\lfloor\frac{x}{2^1}\right\rfloor + \left\lfloor\frac{x}{2^2}\right\rfloor + \left\lfloor\frac{x}{2^3}\right\rfloor + \dots $$

其中,z\lfloor z\rfloor 表示对实数 zz 下取整,即不超过 zz 的最大整数。例如,52=2\left\lfloor\frac{5}{2}\right\rfloor = 2

你拥有一个初始正整数 xx,可以执行任意次(包括 00 次)以下操作:

  • 将当前的 xx 更新为 f(x)f(x),即令 x:=f(x)x:=f(x)

给定目标正整数 yy,求初始时 xx 的最小值,使得经过若干次操作后,xx 的值恰好等于 yy

格式

输入格式

本题包含多组测试数据。

第一行包含一个正整数 TT,表示测试数据的组数。

接下来 TT 行,每行包含一个正整数 yy,表示该组测试数据的目标值。

输出格式

输出 TT 行。对于每组测试数据,输出一行一个整数,表示满足条件的初始值 xx 的最小值。

样例

样例输入 #1

3
3
5
19

样例输出 #1

2
5
2

样例解释 #1

对于第一组测试数据,f(2)=2+1=3f(2) = 2 + 1 = 3,因此可以选择初始值 x=2x = 2

对于第二组测试数据,初始值 x=5x = 5 时无需执行操作即可得到 y=5y = 5。所有小于 55 的正整数经过若干次操作后均无法得到 55,因此答案为 55

对于第三组测试数据,从初始值 x=2x = 2 开始,可以依次得到

234711192 \to 3 \to 4 \to 7 \to 11 \to 19

因此答案为 22

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 TT\le yy\le
11 3030 1010 10510^5
22 30003000
33 4040 101810^{18}

对于 100%100\% 的数据,满足 1T30001 \le T \le 30001y10181 \le y \le 10^{18}

代码源挑战赛 Round 70

Not Attended
Status
Done
Rule
DMY
Start at
2026-7-17 20:00
End at
2026-7-17 21:30
Duration
1.5 hour(s)
Host
Partic.
369