题目描述
你需要在$[0,2^n)$中选一个整数$x$,接着把$x$依次异或$m$个整数$a_1~a_m$。
在你选出$x$后,你的对手需要选择恰好一个时刻(刚选完数时、异或一些数后或是最后),将$x$变为$(\left \lfloor{\frac{2\times x}{2^n}}\right \rfloor \mod 2^n)$你想使$x$最后尽量大,而你的对手会使$x$最后尽量小。
你需要求出$x$最后的最大值,以及得到最大值的初值数量。
输入格式
第一行两个整数$n,m$。
第二行$m$个整数$a_1~a_m$。
输出格式
第一行输出一个整数,表示$x$最后的最大值。
第二行输出一个整数,表示得到最大值的初值数量。
第一个数正确得$6$分,两个数都正确再得$4$分。
样例
样例输入
2 3
1 2 3
样例输出
1
2
数据范围与提示
样例解释:
$x=0$时得到$0$,$x=1$时得到$1$,$x=2$时得到$1$,$x=3$时得到$0$。
数据范围:
对于$20%$的数据,$n\leqslant 10$,$m\leqslant 100$。
对于$40%$的数据,$n\leqslant 10$,$m\leqslant 1,000$。
对于另外$20%$的数据,$n\leqslant 30$,$m\leqslant 10$。
对于$100%$的数据,$n\leqslant 30$,$m\leqslant 100,000$,$0\leqslant a_i<2^n$。
题解
注意上面那个神奇的式子:$(\left \lfloor{\frac{2\times x}{2^n}}\right \rfloor \mod 2^n)$。
刚一看时一脸懵,定睛一看……还是一脸懵……
其实没有那么难,这道题就是将$x$进行了逻辑左移,其实就是说将$x$左移了一位,并将最高为补到了最后面。
那么我们来退一下式子:
先设$q[i]$表示$a$数组的异或前缀和。
那么:$ans=((x\ xor\ a_i)\ll 1)xor(a_i\ xor\ a_m)$。
展开:$ans=(x\ll 1)xor(a_i\ll 1)xor\ a_i\ xor\ a_m$。