pku 1056 IMMEDIATE DECODABILITY
#include <stdio.h>
#include <string.h>
#define MAXTSIZE 100000
#define MAXLEN 11
typedef struct TNode
{
TNode()
{
end=false;
memset(next,0,sizeof(next));
}
bool end;
TNode *next[2];
}*Trie;
TNode node[MAXTSIZE];
int index;
bool insert(Trie T,char *str)
{
while(*str)
{
if( T->end == true ) return false;
int i=*str-'0';
if(!T->next[i]) T->next[i]=node+index++;
T=T->next[i];
str++;
}
if(T->next[0] || T->next[1]) return false;
T->end=true;
return true;
}
int main()
{
int n,cas=1;
char code[MAXLEN];
while(scanf("%s",code)!=EOF)
{
index=0;
Trie tree=node+index++;
bool ok=true;
do
{
if(ok)
{
ok=insert(tree,code);
}
scanf("%s",code);
}while(code[0]!='9');
if(ok) printf("Set %d is immediately decodable\n",cas++);
else printf("Set %d is not immediately decodable\n",cas++);
for(n=0; n<=index; n++)
{
node[n].end=false;
memset(node[n].next,0,sizeof(node[n].next));
}
}
return 0;
}
浙公网安备 33010602011771号