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;
    }
  • 相关阅读:
    Hadoop OutputFormat浅析
    硬盘性能
    HDFS读文件过程分析:读取文件的Block数据
    HDFS写文件过程分析
    JAVA中的编码分析
    HBase 写入优化
    HBase ttl 验证
    大数据多维分析平台的实践
    TiDB在特来电的探索
    Druid 基础使用-操作篇(Pivot、plyql)
  • 原文地址:https://www.cnblogs.com/acmsong/p/7373539.html
Copyright © 2011-2022 走看看