码迷,mamicode.com
首页 > 其他好文 > 详细

Immediate Decodability HDU - 1305(模板trie)

时间:2018-08-10 21:24:13      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:algo   flag   保存   次数   tin   space   bsp   efi   查询   

求这些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\n",kase++);
            else        printf("Set %d is not immediately decodable\n",kase++);

            init();
            cnt = 0;
            continue;
        }
        build(str[cnt]);
    }
    return 0;
}

 

Immediate Decodability HDU - 1305(模板trie)

标签:algo   flag   保存   次数   tin   space   bsp   efi   查询   

原文地址:https://www.cnblogs.com/WTSRUVF/p/9456944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!