BZOJ4269再見Xor 高斯消元解線性基

2022-05-08 03:12:08 字數 680 閱讀 2671

給定n個數,你可以在這些數中任意選一些數出來,每個數可以選任意多次,試求出你能選出的數的異或和的最大值和嚴格次大值。

第一行乙個正整數n。

接下來一行n個非負整數。

一行,包含兩個數,最大值和次大值。

33 5 6

6 5

100% : n <= 100000, 保證n個數不全是0,而且在int範圍內

求異或最大值和嚴格次大值,最大值直接用線性基求即可,因為用高斯消元求出的線性基直接將所有線性基異或在一起就是最大值,所以只需要把其中最小的乙個線性基去掉就是次大值。

#include#include#include#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

int n;

int a[100010];

int tot;

int ans;

int main()

int i;

for(i=1<<30;i;i>>=1)

}if(j>n)

for(j=1;j<=n;j++)}}

for(int i=1;iprintf("%d %d\n",ans^a[tot],ans);

}

BZOJ4269 再見Xor 高斯消元

給定n個數,你可以在這些數中任意選一些數出來,每個數可以選任意多次,試求出你能選出的數的異或和的最大值和嚴格次大值。第一行乙個正整數n。接下來一行n個非負整數。一行,包含兩個數,最大值和次大值。33 5 6 6 5 100 n 100000,保證n個數不全是0,而且在int範圍內 題解 大水 inc...

線性基 BZOJ 4269 再見Xor

划水中。遲早要完 顯然要線性基。考慮求k k 大。對於基的每乙個位置,因為其最高非零位就是位置標號,那看一下 k role presentation k k的這一位是否為 1 1 看是否要異或上 或者不異或 使得這一位得到的答案較大。include define show x cerr x x en...

bzoj2337 XOR路徑 高斯消元

遇到位運算,還是一位一位來。假設考慮二進位制第k位,那麼 令f i 表示以到達i時,第i位存在的期望,那麼對於所有與i相連的j,如果 i,j 的第k位為1,那麼f i 1 f j i的入度,否則f i f j i的入度。這樣看起來有n個方程,但是有乙個是沒用的,隨便去掉乙個。然後實際上令從n到1是等...