我是真心没想到,暴力也能过
说好的数学题一般都是有什么小技巧的么???
到这里怎么成了暴力!!!!!!!!!!!!!
都是套路啊啊啊啊啊啊!!!!!!!
时间限制:
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
//
// Created by liyuanshuo on 2017/4/2.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll num[1000010];
int main( )
{
//freopen ("F:\\CSLeaning\\Thinking in C++\\hihocoder\\in.in", "r", stdin);
int t;
cin>>t;
while ( t-- )
{
int n;
cin>>n;
for (int i = 0; i < n; ++i)
{
cin>>num[i];
}
sort (num, num+n);
ll ans = 0;
for (int j = n; j >=0 ; --j)
{
for (int i = j-1; i >=0 ; --i)
{
ll tmp_ans = num[i]*num[j];
if( tmp_ans*num[j] <= ans )
break;
ans = max (ans, tmp_ans*(num[j]&num[i]));
}
}
cout<<ans<<endl;
}
return 0;
}