*hdu 5536(字典树的运用)


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.

1T1000
3n1000
0si109
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


题意:求下面这个公式的最大值:
maxi,j,k(si+sj)sk

思路:如果用普通方法你要分别枚举3个数,n^3感觉会超时的。

然而完全莫有想到能用字典树,你先把所有的数保存下来,然后删去要用的i和j,再在里面找出能和a[i]+a[j]异或

出的最大值。相当于值需要枚举i和j即可。          /*好机智


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
typedef long long ll;
using namespace std;

int a[1005];

struct node
{
    int number;
    int flag;
    int next[2];
    void ini()
    {
        next[0] = next[1] = 0;
        flag = 0;
    }
} pnode[1000005];
int root = 0;
int tot;

void inser(int x)
{
    int tt = root;
    for(int i = 30; i >= 0; i --)
    {
        int t;
        if(x & (1<= 0; i--)
    {
        int t;
        if(x & (1<= 0; i--)
    {
        int t;
        if(x & (1< 0 && nex) tt = pnode[tt].next[0];
            else
            {
                tt = pnode[tt].next[1];
                x ^= (1< 0 && nex)
            {
                tt = pnode[tt].next[1];
                x ^= (1<



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.

1T1000
3n1000
0si109
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

你可能感兴趣的:(ACM/ICPC)