題面
線性基,是構造出一組數:ax,ax-1….a1,ax的二進位制最高位為x。這些數字能異或和可以表示原來所有數的異或和。其實相當於乙個高斯消元的過程。所以我們按位列舉,如果這一位曾經沒數,就直接加入,如果有數,我們就讓這兩個數異或起來,進而繼續表示其他的數。要求最大值則按位貪心即可。
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const
int maxn = 70;
int n;
ll ans;
ll b[maxn];
int main()
else u^=b[j];
}}
for(register
int i=63;i>=1;i--)
if((ans^b[i])>ans) ans^=b[i];
printf("%lld",ans);
return
0;}
Luogu3812 模板 線性基
參考 blog 首先,對於序列 a,b,c 它與 a,b,b quad xor quad c 能異或出的數的種類相同。所以我們插入乙個數時,可以與原序列中的數瞎異或。我們可以使序列中的數的二進位制最高位不同 這種情況是唯一的 然後貪心取就好了。上述做法在 solve1 函式中。update 更新了高...
P3812 模板 線性基
線性基可以解決的問題 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。然後這道題也是一道模板題了。什麼是線性基呢?就是乙個去求解異或和最值的問題,為什麼可以求異或和最大呢,這裡需要用到了異或的性質了。a b c則有a c b以及a b c。所以我們距離9 10 12 11這...
P3812 模板 線性基
線性基是什麼?你可以理解為將乙個序列處理完之後得到的產物,並且有如下性質 1.原序列裡面的任意乙個數都可以由線性基裡面的一些數異或得到。2.線性基裡面的任意一些數異或起來都不能得到0 3.線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的 因此,線性基可以計算一段序列中異或和最大,...