一个CF1775C(Codeforces Round #843 (Div. 2))的小技巧
若\(n\)的第\(i\)位为\(1\),而我们需要不断令\(n+1\)找到下一个最小的\(k\),使得\(k\)的第\(i\)位为\(0\)。
技巧:
假设\(n\)为10101[1]1001,括号内是要求的第\(i\)位
那么先将二进制下的\(n>>i\),变为十进制后\(+1\),再转为二进制并\(<<i\),即
\[(n/(1<<i)+1)*(1<<i)
\]
参考@此处
若\(n\)的第\(i\)位为\(1\),而我们需要不断令\(n+1\)找到下一个最小的\(k\),使得\(k\)的第\(i\)位为\(0\)。
技巧:
假设\(n\)为10101[1]1001,括号内是要求的第\(i\)位
那么先将二进制下的\(n>>i\),变为十进制后\(+1\),再转为二进制并\(<<i\),即
参考@此处