鏈結
給定n個整數(數字可能重複),求在這些數中選取任意個,使得他們的異或和最大。($1 \leq n \leq 50, 0\leq a_i \leq 2^$)
異或和本來沒有單調性,但是從高到低遍歷線性基是單調的。考慮第 $i$ 位時,如果當前答案 $x$ 第 $i$ 位為0,就將 $x$ 異或上 $a_i$;否則不做任何操作。顯然每次答案不會變劣,最終的 $x$ 即為答案
#includeusingnamespace
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...