给定 \(x\),求一个 \(y<x\) 使得 \(x,y,x\oplus y\) 构成非退化三角形。根据三角形不等式进行推导:
- \(x+y>x\oplus y \to x\oplus y+2(x\&y)>x\oplus y \to x\&y>0\);
- \(y+x\oplus y>x \to y+(x+y)-2(x\&y)>x \to y>x\&y\)。
所以所需条件是 \(y>x\&y>0\),即:
- 存在一位 \(x,y\) 同为 \(1\)(\(x\&y>0\));
- 存在一位 \(x\) 为 \(0\),\(y\) 为 \(1\)(\(y>x\&y\))。
枚举所有 \(\text{pop_count}=2\) 的数,判断是否满足上述条件且 \(x>y\)。如果找不到则输出 -1
。复杂度 \(O(\log^2 x)\)。也可以枚举 \(x\) 的 \(0\) 位,再加一个 \(x\) 的 \(\text{lowbit}\)。