我的做法好像网上很少。当然不是我自己想的,从一个古老的新浪博客颓的。不需要任何特判!
其实就是一些套路。首先当然要算(a_i)的范围。
设最高位是(2^x),考虑这一位能异或出来的概率。很多方法都能算出来(frac{1}{2})。
所以(frac{1}{2}*2^{xk}<2^{63}) 也就是(xk<64)
这样就知道了(k=1)的20分做法。每一位概率都是(frac{1}{2}),期望的线性性加起来就好了。
正确的做法也很简单,但是需要一些套路。
首先求线性基,每一个数作为异或和的概率相等,所以直接把原序列换成线性基。
然后把(x^k)这个式子展开,按照二进制位。可以算每一项的系数,然后只有概率要求了。
又是一个套路,如果异或方程组有(m)个变量,(n)个非零行,解的个数就是(2^{m-n})。挺好证的。概率就是(frac{1}{2^n})。
然后就没啥了。我连这都不会写是不是没救了。
复杂度O(应该没错)
这个题思想挺像 先用线性基缩小范围,再高斯消元