John is a manager of a CPU chip factory, the factory produces lots of chips everyday. To manage large amounts of products, every processor has a serial number. More specifically, the factory produces
n
chips today, the
i
-th chip produced this day has a serial number
si
.
At the end of the day, he packages all the chips produced this day, and send it to wholesalers. More specially, he writes a checksum number on the package, this checksum is defined as below:
which i,j,k are three different integers between 1 and n . And ⊕ is symbol of bitwise XOR.
Can you help John calculate the checksum number of today?
At the end of the day, he packages all the chips produced this day, and send it to wholesalers. More specially, he writes a checksum number on the package, this checksum is defined as below:
maxi,j,k(si+sj)⊕sk
which i,j,k are three different integers between 1 and n . And ⊕ is symbol of bitwise XOR.
Can you help John calculate the checksum number of today?
The first line of each test case is an integer n , indicating the number of chips produced today. The next line has n integers s1,s2,..,sn , separated with single space, indicating serial number of each chip.
1≤T≤1000
3≤n≤1000
0≤si≤109
There are at most 10 testcases with n>100
2 3 1 2 3 3 100 200 300
6 400
【题解】
这题正解是字典树,不过根据给的时间看,可以暴力解,还是有那么一点点难度,直接暴力会T,稍微加一点优化,就过了,毕竟有9s时间,注意代码中红色部分,优化的地方。
【AC代码】
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<math.h>
#include<stack>
using namespace std;
typedef long long ll;
const int inf=-1e8;
const int N=1005;
int m,n;
ll a[N];
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
for(int i=1;i<=m;++i)
{
scanf("%lld",&a[i]);
}
sort(a+1,a+m+1,cmp);
ll ans=-1;
for(int i=1;i<=m;++i)
{
for(int j=i+1;j<=m;++j)
{
for(int k=j+1;k<=m;++k)
{
ans = max(ans,(a[i]+a[j])^a[k]);
ans = max(ans,(a[i]+a[k])^a[j]);
ans = max(ans,(a[j]+a[k])^a[i]);
}
}
}
printf("%lld\n",ans);
}
return 0;
}