/**
* Problem:Nim
* Author:Shun Yao
* Time:2013.5.28
* Result:Accepted
*/
#include <cstdio>
void swap(long &x, long &y) {
x ^= y;
y ^= x;
x ^= y;
}
int main() {
long n, a[100], b[100];
freopen("nim.in", "r", stdin);
freopen("nim.out", "w", stdout);
scanf("%ld", &n);
for (long i = 0; i < n; ++i) {
scanf("%ld", a + i);
b[i] = a[i];
}
long now = -1;
for (long i = 1 << 30; i; i >>= 1) {
long pos = -1;
for (long j = now + 1; j < n; ++j)
if ((a[j] & i) && (pos < 0 || b[j] > b[pos]))
pos = j;
if (pos < 0)
continue;
++now;
if (pos != now) {
swap(a[pos], a[now]);
swap(b[pos], b[now]);
}
for (long j = now + 1; j < n; ++j)
if (a[j] & i)
a[j] ^= a[now];
}
long long ans = 0;
for (long i = 0; i < n; ++i)
if (!a[i])
ans += (long long)b[i];
printf("%lld", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
又有错误: 注意c++ &引用 的用法.