Pj Immediate Decodability

判断一个串是否是其他的前缀

我们需要建立一颗tire树

在插入边的时候,如果遇到一个其他串的结尾,那么就说明至少有一个串,是插入串的前缀。如果在插入完后没有新增的节点,那么插入的串就是其他串的前缀

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int manx=1<<8;
char data[manx];
int t[manx][2],tail;
int end[manx<<8];
bool flag=false;
void ins()
{
    int last=tail,Now=0;
    int len=strlen(data)-1;
    for(int i=0;i<=len;i++)
    {
        int nxt=data[i]-'0';
        if(!t[Now][nxt])    t[Now][nxt]=++tail;
        if(end[Now])    flag=true;//经过一个串的结尾
        Now=t[Now][nxt];
    }
    end[Now]+=1;
    if(last==tail)  flag=true;//是其他串的前缀
    return ;
}
int main()
{
    int tot=0;
    //freopen("a.in","r",stdin);
    while(scanf("%s",data)!=EOF)
    {
        if(data[0]=='9')
        {
            tot+=1;
            if(!flag)
                printf("Set %d is immediately decodable\n",tot);
            else
            {
                printf("Set %d is not immediately decodable\n",tot);
            }//每一组数据都要初始化
            flag=false;
            memset(t,0,sizeof(t));
            memset(end,sizeof(end));
            tail=0;
            continue;
        }
        if(!flag)   ins();
    }
}

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...