給定n個數,你可以在這些數中任意選一些數出來,每個數可以選任意多次,試求出你能選出的數的異或和的最大值和嚴格次大值。
第一行乙個正整數n。
接下來一行n個非負整數。
一行,包含兩個數,最大值和次大值。
33 5 6
6 5
100% : n <= 100000, 保證n個數不全是0,而且在int範圍內
題解:大水~
#include #include #include using namespace std;int n,tot,ans;
int v[100010];
int main()
if(!(v[tot]&i))
for(j=1;j<=n;j++) if(j!=tot&&(v[j]&i)) v[j]^=v[tot];
} for(i=1;i<=tot;i++) if((ans^v[i])>ans) ans^=v[i];
printf("%d %d",ans,ans^v[tot]);
return 0;
}
線性基 BZOJ 4269 再見Xor
划水中。遲早要完 顯然要線性基。考慮求k k 大。對於基的每乙個位置,因為其最高非零位就是位置標號,那看一下 k role presentation k k的這一位是否為 1 1 看是否要異或上 或者不異或 使得這一位得到的答案較大。include define show x cerr x x en...
BZOJ4269再見Xor 高斯消元解線性基
給定n個數,你可以在這些數中任意選一些數出來,每個數可以選任意多次,試求出你能選出的數的異或和的最大值和嚴格次大值。第一行乙個正整數n。接下來一行n個非負整數。一行,包含兩個數,最大值和次大值。33 5 6 6 5 100 n 100000,保證n個數不全是0,而且在int範圍內 求異或最大值和嚴格...
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是等...