一个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) \]

参考@此处

posted @ 2023-01-11 12:06  SxtoxA  阅读(35)  评论(0)    收藏  举报
12 13