最大異或和 線性基模板

2022-05-02 00:48:19 字數 533 閱讀 1400

鏈結

給定n個整數(數字可能重複),求在這些數中選取任意個,使得他們的異或和最大。($1 \leq n \leq 50, 0\leq a_i \leq 2^$)

異或和本來沒有單調性,但是從高到低遍歷線性基是單調的。考慮第 $i$ 位時,如果當前答案 $x$ 第 $i$ 位為0,就將 $x$ 異或上 $a_i$;否則不做任何操作。顯然每次答案不會變劣,最終的 $x$ 即為答案

#includeusing

namespace

std;

typedef

long

long

ll;int

n;ll num[

55], base[55

];void

getbase()

else num[i] ^= base

[j];}}

}}int

main()

printf(

"%lld\n

", ans);

return0;

}

51nod1312 最大異或和(線性基)

傳送門 先把線性基建出來 顯然其他所有數都可以湊成線性基的最大值 考慮怎麼讓線性基內和最大 手玩一下可以發現最優情況是最高位的都有,剩下每乙個基都少填乙個 include using namespace std const int rlen 1 20 1 inline chargc define i...

最大異或和

問題描述 給出n個整數,多組詢問求乙個給出的數與這n個數中的乙個數的最大異或的值。輸入格式 第一行乙個整數n,表示有個數字。第二行n個正整數。第三行乙個整數m,表示m個詢問。第四行m個整數,表示m個詢問的整數。輸出格式 共m行,對於每個詢問輸出最大的異或值。輸入樣例 43 5 6 7 31 4 7 ...

最大異或和

展開 題目描述 給定乙個非負整數序列 初始長度為nn。有 mm 個操作,有以下兩種操作型別 a x 新增操作,表示在序列末尾新增乙個數 xx,序列的長度 n 1n 1。q l r x 詢問操作,你需要找到乙個位置 pp,滿足l le p le rl p r,使得 a p oplus a p 1 op...