傳送門
先把線性基建出來
顯然其他所有數都可以湊成線性基的最大值
考慮怎麼讓線性基內和最大
手玩一下可以發現最優情況是最高位的都有,剩下每乙個基都少填乙個
#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 ...