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
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?
Input
The first line of input contains an integer T indicating the total number of test cases.
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
Output
For each test case, please output an integer indicating the checksum number in a line.
Sample Input
2
3
1 2 3
3
100 200 300
Sample Output
6
400
此題暴力即可,從N個數中選出3個數,不用考慮相互之間是否有序。選出3個數後再選出2個數作爲和,這樣就能枚舉所有情況。
AC code
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N = 1010;
int main()
{
ios::sync_with_stdio(0);
int T;
cin>>T;
while(T--)
{
LL i,j,k,n;
LL s[N],sum,ans=-1;
cin>>n;
for(i=0; i<n; i++)
cin>>s[i];
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
for(k=j+1;k<n;k++)
{
ans = max(ans,(s[i]+s[j])^s[k]);
ans = max(ans,(s[i]+s[k])^s[j]);
ans = max(ans,(s[j]+s[k])^s[i]);
}
}
}
cout<<ans<<endl;
}
return 0;
}
錯誤示範:
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N = 1010;
int main()
{
ios::sync_with_stdio(0);
int T;
cin>>T;
while(T--)
{
LL i,j,k,n;
LL s[N],sum,ans=-1;
cin>>n;
for(i=0; i<n; i++)
cin>>s[i];
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if( i == j)
continue;
sum = s[i]+s[j];
for(k=0; k<n; k++)
{
if(k == i || k == j)
continue;
if(ans < sum^s[k])
{
ans = sum^s[k];
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
判斷了s[1],s[2],s[3],之後又判斷了s[2],s[1],s[3]。