Immediate Decodability

https://loj.ac/problem/10052

题目描述

  给出一些字符串,求是否有一个串是另一个串的前缀。

思路

  和Phone List完全一样,字典树模板题,只是输出不同,注意初始化即可,不在赘述了。

代码

#include <bits/stdc++.h>
using namespace std;
int ch[5000][3],tot;
bool ed[5000];
void clear()
{
    memset(ch,0,sizeof(ch));
    memset(ed,0,sizeof(ed));
    tot=1;
}
bool insert(char *s)
{
    int u=1;
    int len=strlen(s);
    bool f=0;
    for(int i=0;i<len;i++)
    {
        int num=s[i]-'0';
        if(!ch[u][num])ch[u][num]=++tot;
        else if(i==len-1)f=1;
        u=ch[u][num];
        if(ed[u])f=1;
    }
    ed[u]=1;
    return f;
}
int main() 
{
    int cas=0;
    char s[20];
    while(~scanf(" %s",s))
    {
        bool f=0;
        clear();
        if(insert(s))f=1;
        while(scanf(" %s",s))
        {
            if(strlen(s)==1&&s[0]=='9')break ;
            if(insert(s))f=1;
        }
        if(!f)printf("Set %d is immediately decodable\n",++cas);
        else printf("Set %d is not immediately decodable\n",++cas);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/fangbozhen/p/11628494.html