模板 線性基

2021-08-04 03:43:01 字數 1339 閱讀 2582

難度較大,請勿棄療

給定n個整數(數字可能重複),求在這些數中選取任意個,使得他們的異或和最大。

n<=50

sample input33

21sample output

3

看上去莫名其妙地想貪心。。。

給些定義:

s 為無符號整數集 即s

∈n∗記為

xor−

sum(

s) x

or−s

um(s

)=s1

⊕s2⊕

....

⊕s|s

| 記為s

pan(

s)對於所有t∈

s ,有xo

r−su

m(t)

∈spa

n(s)

就是所有子集異或和的集合

前方高能!!!

s 若有元素sj

,使s去掉sj

後的集合s′

滿足 sj

∈spa

n(s′

) 則稱s

線性相關,否則稱

s線性無關

前方高能!!!*2+重點!!!若b

為s的線性基

b 滿足

1. b∈s

,s∈s

pan(

b)2. b

線性無關

線性基的長度為|b

| 前方高能!!!*3+重點!!!*2

我們設sma

x 為

s 中最大的元素 設l

en=l

og2(

smax

)我們可用乙個陣列g[

len]

的陣列儲存線性基

對於每個i,

gi只有兩種可能:

1. gi=

0 所有j

使igj

第i位∈

2. gi≠

0 所有j

使j≠i

gj第i

位=0所有

j 使

ii 第

j 位=0

所有j使i

>jg

i 第

j 位∈

假設插入數字x

流程參考**

void insert(ll x)

}

看了**,你也許會大呼簡單

前面當然要加上插入啊

ll ans=0;

fr(i,0,len-1)

ans^=g[i];

模板 線性基模板

數學太差,直接線性基當資料結構用orz 表示數集 1,2 k 1 表示乙個異或集合 可以說是將原數集壓縮 性質 直接抄的orz,雖然也不是特別懂 0 2.線性基的異或集合中每個元素的異或方案唯一,其實這個跟性質1是等價的。3.線性基二進位制最高位互不相同。1,2n 1 1,2n 1 1,2n 1 5...

模板 線性基

給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。線性基模板可解決 將n個整數看做集合a 線性基即為集合a的子集 線性基中每個元素的異或方案唯一,也就是說,線性基中不同的異或組合異或出的數都是不一樣的。線性基的二進位制最高位互不相同。這樣我們先構造出線性基 然後貪心的去搞最大...

線性基 模板

線性基的用處 洛谷p3812 牛客練習賽26d 參考部落格 這位童鞋寫得很好 求異或最大值 include bits stdc h using namespace std typedef long long ll const int maxn 1e5 5 const int mod 1e9 7 co...