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(应该没错)

代码

这个题思想挺像 先用线性基缩小范围,再高斯消元

原文地址:https://www.cnblogs.com/happyguy/p/14485240.html