uoj36 玛里苟斯 高斯消元做法
我的做法从一篇古老的博客学的,好像网上很少。不需要任何特判!
首先当然要算\(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(应该没错) 代码
这个题很类似 先用线性基缩小范围,再高斯消元 所以这玩意还是挺套路的