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

2021-09-26 23:38:58 字數 1740 閱讀 3528

傳送門

先把線性基建出來

顯然其他所有數都可以湊成線性基的最大值

考慮怎麼讓線性基內和最大

手玩一下可以發現最優情況是最高位的都有,剩下每乙個基都少填乙個

#include

using

namespace std;

const

int rlen=

1<<20|

1;inline

chargc(

)#define int long long

#define gc getchar

inline

intread()

#define ll long long

#define re register

#define pii pair

#define fi first

#define se second

#define pb push_back

#define cs const

#define bg begin

#define int long long

#define poly vector

cs int mod=

1e9+7;

inline

intadd

(int a,

int b)

inline

intdec

(int a,

int b)

inline

intmul

(int a,

int b)

inline

void

add(

int&a,

int b)

inline

void

dec(

int&a,

int b)

inline

void

mul(

int&a,

int b)

inline

intksm

(int a,

int b,

int res=1)

inline

intinv

(int x)

inline

void

chemx

(int

&a,int b)

inline

void

chemn

(int

&a,int b)

cs int n=55;

int a[n]

,bas[n]

,siz,n;

inline

void

insert

(int x)

else}}

signed

main()

for(

int i=50;

~i;i--

)int res=

0,ans=0;

for(

int i=50;

~i;i--)if

(!(res&

(1ll

<)&&bas[i]

)res^

=bas[i]

; ans=

(n-siz)

*res;

for(

int i=

50,first=0;

~i;i--)}

cout<}

51nod 1312 最大異或和

很顯然我們求出一組線性基來,如果有m個基,那麼可以構造n m 1個最大異或值 而對於線性基中的元素,除了最大的元素,我們用最大異或值異或掉每個元素累加進答案 而不是把線性基中的元素處理成乙個下三角矩陣 include include include include include include d...

51nod1312 最大異或和

基準時間限制 1 秒 空間限制 131072 kb 分值 320 有乙個正整數陣列s,s中有n個元素,這些元素分別是s 0 s 1 s 2 s n 1 現在你可以通過乙個操作來更新陣列。操作方法如下 選擇兩個不同的數i j 0 i,j 你可以進行任意多次操作,問最後生成的陣列s的元素和 sum s ...

最大異或和

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