数列之异或
· 阅读需 1 分钟
致敬每一个版本逆行者(指不找规律数位写过的所有人)
这道题看似很难,但就是一个找性质速秒的题
思考对于任意一个奇数与它减一,它们的二进制可以表示为和,这时候不管前面的位是多少,它们的异或和都是
所以对于所有的数,我们只需要考虑它可以组出多少组就可以很快的找到答案了
考虑在最前面添加一个(不会影响答案,任意数异或还是它本身)
当是奇数时,恰好可以凑出组,这时候只要考虑组数的奇偶性就行了
当是偶数时,可以凑出组和一个单独的,同样判断奇偶性求异或和就行了
if( n&1 )
cout<<( ( ( n+1 )>>1 )&1 );
else
cout<<( n^( ( ( n+1 )>>1 )&1 ) );
