zoukankan      html  css  js  c++  java
  • [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;
    }
  • 相关阅读:
    c_水程序
    Arlenmbx!!!!
    java
    c语言随机函数&&时间函数
    2016省赛总结
    666
    【UOJ#389】【UNR#3】白鸽(欧拉回路,费用流)
    【洛谷P3756】[CQOI2017]老C的方块(最小割)
    CF704D Captain America(上下界网络流)
    AtCoder Regular Contest 097
  • 原文地址:https://www.cnblogs.com/acmsong/p/7373539.html
Copyright © 2011-2022 走看看