p3812 【模板】線性基
給定n個整數(數字可能重複),求在這些數中選取任意個,使得他們的異或和最大
把所有數insert進入線性基,把線性基中所有元素xor起來 = ans
#include
typedef long
long ll;
using
namespace std;
inline int
read()
while
(ch>=
'0'&&ch<=
'9') s=s*
10+ch-
'0',ch=
getchar()
;//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
}const
int maxn=60;
ll a[maxn]
,c[maxn]
;int l=60;
bool
insert
(ll x)
//讓x當主元j,需要先用第k(kfor
(int k=j-
1;k>=
0;k--
)//接著用x去消掉第k(k>j)個主元的第j位
for(
int k=l;k>j;k--
) a[j]
= x;
return1;
}return0;
}int
main()
ll w=0;
for(
int i=l;i>=
0;i--
) cout<
}
P3812 模板 線性基
線性基可以解決的問題 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。然後這道題也是一道模板題了。什麼是線性基呢?就是乙個去求解異或和最值的問題,為什麼可以求異或和最大呢,這裡需要用到了異或的性質了。a b c則有a c b以及a b c。所以我們距離9 10 12 11這...
P3812 模板 線性基
線性基是什麼?你可以理解為將乙個序列處理完之後得到的產物,並且有如下性質 1.原序列裡面的任意乙個數都可以由線性基裡面的一些數異或得到。2.線性基裡面的任意一些數異或起來都不能得到0 3.線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的 因此,線性基可以計算一段序列中異或和最大,...
P3812 模板 線性基
n 給定乙個長度為n nn的序列,要從中選出若干個數,使得它們的異或值最大,輸出這個最大值 資料範圍 n 50 n leq 50 n 50 sol utio nsolution soluti on線性基的異或值域和原序列的異或值域相同,考慮構造線性基,每次比較是否需要異或,這樣一定不會更劣 時間複雜...