洛谷3812 模板 線性基

2022-05-20 18:31:41 字數 756 閱讀 5579

題目大意:

給你n個數,求這些數能異或出的數的最大值。

思路:線性基模板。

b中的數滿足對於每個b[i],最高位在第i位。

構造方法就是對於每個數字,從高到低列舉每乙個1,如果這一位對應的b[i]還沒有,就把這個數作為b[i],如果有,就把這個數異或上b[i]。

考慮兩個數a,b,它們能異或出來的數為0,a,b,a xor b,如果把b換成a xor b,它們能異或出來的數還是0,a,b,a xor b。

所以b能異或出來的值域和a能異或出來的值域相同。

最後能異或出的最大值可以用類似貪心的思想。

從高到低列舉每個數,如果和現在的ans異或起來比ans大那麼就異或,不然就不管。

這樣就能優先保證更高的位出現在答案中,也就可以保證ans最大。

1 #include2 #include3 #include4 typedef long

long

int64;

5inline int64 getint()

12const

int n=51;13

int64 b[n];

14int

main() else26}

27}28 int64 ans=0;29

for(register int i=n-1;~i;i--)

32 printf("

%lld\n

",ans);

33return0;

34 }

洛谷 P3812 模板 線性基

這是一道模板題。給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。第一行乙個數n,表示元素個數 接下來一行n個數 僅一行,表示答案。輸入 1 2 1 1輸出 1 11 n 50,0 si 250 1 leq n leq 50,0 leq s i leq 2 1 n 50,0 ...

洛谷P3812 模板 線性基

給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。1 leq n leq50,0 leq a i leq 2 顯然重複不重複沒有什麼區別。直接套線性基板子。include using namespace std typedef long long type const int...

洛谷P3812 模板 線性基

這是一道模板題。給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。輸入格式 第一行乙個數n,表示元素個數 接下來一行n個數 輸出格式 僅一行,表示答案。輸入樣例 1 複製2 1 1 輸出樣例 1 複製1 1 leq n leq 50,0 leq s i leq 2 1 n 5...