zoukankan      html  css  js  c++  java
  • Immediate Decodability HDU

    求这些01串是否有一个是另一个的前缀。。

    就是求次数就好了嘛。。。emm。。。

    网上竟然都用指针写。。。。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #define maxn 2000010
    #define mem(a, b) memset(a, b, sizeof(a))
    using namespace std;
    int tot, n, m, rt;
    int trie[maxn][2], sum[400001];
    char str[1010][1010];
    //bool vis[maxn];查询整个单词用
    void build(char *s)
    {
        int len = strlen(s);
        rt = 0;
        for(int i=0; i<len; i++)
        {
            int x=s[i]-'0';
            if(trie[rt][x]==0)//现在插入的字母在之前同一节点处未出现过
            {
                trie[rt][x]=++tot;//字母插入一个新的位置,否则不做处理
            }
            sum[trie[rt][x]]++;    //前缀后移一个位置保存前缀出现的次数
            rt=trie[rt][x];//为下个字母的插入做准备
        }
        /*vis[rt]=true;标志该单词末位字母的尾结点,在查询整个单词时用到*/
    }
    int qp(char *s)
    {
        int len = strlen(s);
        rt = 0;
        for(int i=0; i<len; i++)
        {
            int x=s[i]-'0';
            if(trie[rt][x]==0)return 0;//以rt为头结点的x字母不存在,返回0
            rt=trie[rt][x];//为查询下个字母做准备
        }
       // cout<< sum[rt] <<endl;
        return sum[rt];
        //查询整个单词时,应该return vis[rt] , 查询前缀出现的次数时,应该return sum[rt]
    }
    
    void init()
    {
        tot = 0;
        mem(trie, 0);
        mem(sum, 0);
    }
    
    int main()
    {
        init();
        int kase = 1, cnt = 0;
        while(scanf("%s",str[++cnt])!=EOF)
        {
            if(strcmp(str[cnt],"9")==0){
                bool flag=true;
                for(int i=1;i<cnt;i++){
                  //  cout<< temp <<endl;
                    if(qp(str[i])>1)
                    {
                        flag=false;
                        break;
                    }
                }
              //  cout << flag <<endl;
                if(flag)    printf("Set %d is immediately decodable
    ",kase++);
                else        printf("Set %d is not immediately decodable
    ",kase++);
    
                init();
                cnt = 0;
                continue;
            }
            build(str[cnt]);
        }
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    select,radio,checkBox,获取/设置选中项的值和文本
    前端自学习网站
    ECMAScript 6
    常见几种浏览器兼容性问题
    HTML+CSS
    高级程序设计JavaScript
    年龄显示0.5岁
    编译原理
    underscore.js常用的API
    python中的字符串
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9456944.html
Copyright © 2011-2022 走看看