hihocoder #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, ... A(0 <= A<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;
}


猜你喜欢

转载自blog.csdn.net/liyuanshuo_nuc/article/details/68953065