题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1305
题解:判断字符串是否存在前缀
#include <stdio.h>
#include <string.h>
#define MAXN 100002
int child[MAXN][11];//child[i][j]=0说明没有对应的节点,以i为根节点的子树,
int flag[MAXN];
int tot,root;
void Trie()
{
memset(child[0],0,sizeof(child[0]));
flag[0]=0;
tot=root=0;//根节点为0
}
int inset(char *str)
{
int *cur=&root,ans=0;
char *ptr;
for(ptr=str;*ptr;++ptr)
{
cur=&child[*cur][*ptr-'0'];
if(*cur==0)
{
*cur=++tot;
ans=1;
memset(child[tot],0,sizeof(child[tot]));
flag[tot]=0;
}
if(flag[*cur]==1)
return 0;
}
flag[*cur]=1;
return ans;
}
int main()
{
char str[12];
int ans,test=1;
while(scanf("%s",str)!=EOF)
{
Trie();
ans=1;
if(!inset(str))
ans=0;
while(scanf("%s",str)&&strcmp(str,"9")!=0)
{
if(ans)
{
if(!inset(str))
ans=0;
}
}
if(ans)
printf("Set %d is immediately decodable\n",test++);
else
printf("Set %d is not immediately decodable\n",test++);
}
return 0;
}