1496 : 寻找最大值
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定N个数A1, A2, A3, … AN,小Ho想从中找到两个数Ai和Aj(i ≠ j)使得乘积Ai × Aj × (Ai AND Aj)最大。其中AND是按位与操作。
小Ho当然知道怎么做。现在他想把这个问题交给你。
输入
第一行一个数T,表示数据组数。(1 <= T <= 10)
对于每一组数据:
第一行一个整数N(1<=N<=100,000)
第二行N个整数A1, A2, A3, … AN (0 <= Ai <220)
输出
一个数表示答案
样例输入
2
3
1 2 3
4
1 2 4 5
样例输出
12
80
#include <bits/stdc++.h>
using namespace std;
long long a[100000];
int main()
{
long long t;
cin>>t;
while(t--)
{
long long n;
cin>>n;
for(long long i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
long long maxs=0;
long long x;
for(long long i=0;i<n-1;i++)
{
x=a[i]*a[i+1]*(a[i]&a[i+1]);
if(x>maxs) maxs=x;
}
cout<<maxs<<endl;
}
}