[hdu 4825]字典树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825

字典树入门题

#include<bits/stdc++.h>
using namespace std;

const int maxn=100005;

struct Node
{
    int ch[2];
    void init()
    {
        ch[0]=ch[1]=-1;
    }
};

struct Trie
{
    Node node[maxn*33];
    int tot;
    void init()
    {
        tot=0;
        node[0].init();
    }
    void insert(long long x)
    {
        int tmp[33];
        for (int i=0;i<33;i++)
        {
            tmp[i]=x&1;
            x>>=1;
        }
//        printf("insert ");
//        for (int i=32;i>=0;i--)
//        {
//            printf("%d",tmp[i]);
//        }
//        printf("
");
        int now=0;
        for (int i=32;i>=0;i--)
        {
            if (node[now].ch[tmp[i]]==-1)
            {
                node[++tot].init();
                node[now].ch[tmp[i]]=tot;
            }
            now=node[now].ch[tmp[i]];
        }
    }
    long long query(long long x)
    {
        int tmp[33];
        for (int i=0;i<33;i++)
        {
            tmp[i]=x&1;
            x>>=1;
        }
//        printf("query :");
//        for (int i=32;i>=0;i--)
//        {
//            printf("%d",tmp[i]);
//        }
//        printf("
");
        long long ans=0;
        int now=0;
        for (int i=32;i>=0;i--)
        {
            if (node[now].ch[1-tmp[i]]!=-1)
            {
                ans=(ans<<1)|(1-tmp[i]);
                now=node[now].ch[1-tmp[i]];
            }
            else
            {
                ans=(ans<<1)|tmp[i];
                now=node[now].ch[tmp[i]];
            }
        }
        return ans;
    }
}T;

int main()
{
    int t;
    scanf("%d",&t);
    for (int cas=1;cas<=t;cas++)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        T.init();
        for (int i=1;i<=n;i++)
        {
            long long x;
            scanf("%I64d",&x);
            T.insert(x);
        }
        printf("Case #%d:
",cas);
        for (int i=1;i<=m;i++)
        {
            long long x;
            scanf("%I64d",&x);
            printf("%I64d
",T.query(x));
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/acmsong/p/7373539.html