線性基(模板) LUOGU 3812

2022-05-12 11:31:18 字數 585 閱讀 2226

題面

線性基,是構造出一組數: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.線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的 因此,線性基可以計算一段序列中異或和最大,...