题意:从n个数中,选择一些数,使得异或最大。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define ll __int64 5 using namespace std; 6 7 ll c[110][110]; 8 int n; 9 ll cc; 10 11 void gauss() 12 { 13 int i,j; 14 ll ans=0; 15 for(int r=0; r<61; r++) 16 { 17 c[r][n]=1; 18 for(i=0; i<r; i++) 19 { 20 for(j=0; j<n; j++) 21 { 22 if(c[i][j]) 23 break; 24 } 25 if(j<n&&c[r][j]) 26 { 27 for(; j<=n; j++) 28 { 29 c[r][j]^=c[i][j]; 30 } 31 } 32 } 33 for(i=0; i<n; i++) 34 { 35 if(c[r][i]) break; 36 } 37 if(i<n||(i==n&&!c[r][n])) 38 { 39 ans|=1ll<<(60-r); 40 } 41 } 42 printf("%I64d\n",ans); 43 } 44 45 int main() 46 { 47 while(scanf("%d",&n)!=EOF) 48 { 49 for(int i=0; i<n; i++) 50 { 51 scanf("%I64d",&cc); 52 for(int j=60; j>=0; j--) 53 { 54 c[60-j][i]=(cc>>j)&1; 55 } 56 } 57 gauss(); 58 } 59 return 0; 60 }