Hacking Numbers (Every Version)
C1. Hacking Numbers (Easy Version)
首先考虑 digit 这个操作可以将未知数 \(x\) 的值域减小很多。在两次 digit 过后,数的值域为 \([1,16]\),接下来我们希望它变成一个固定的数,我们知道,减操作如果为非正数就不会进行,利用这点,我们可以对原数二进制拆分考虑,二进制下从大到小减去它的每一位为一即可。这个时候对于所有只有一位的数,会减去二进制下那一位右边所有的一,从而变成一,我们 \(16\) 也同样是这样,于是只需要减 \(4\) 次就行。你也可以这么考虑,一开始值域为 \([1,16]\),为了最快缩小值域,每次,我减一半,值域就变成 \([1,8],[1,4],[1,2],[1,1]\)。最后都会变成 \(1\),加上 \(n-1\) 就行。加起来正好七步。

浙公网安备 33010602011771号