和3630基本一样!!只不过这个数据水了一些!!!详细讲解看本博3630题解
#include<iostream>
using namespace std;
bool ok=true;
char a[15];
int p=1;
int num;
struct node
{
int next[2];
bool isprefix;
void init()
{
memset(next,0,sizeof(next));
isprefix=false;
}
};
node tree[100000];
void insert(char a[])
{
int cou=0;
int index=0;
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(tree[index].next[a[i]-'0']==0)
{
tree[++num].init();
tree[index].next[a[i]-'0']=num;
index=num;
}
else
{
index=tree[index].next[a[i]-'0'];
if(tree[index].isprefix)
{
cou++;
ok=false;
return ;
}
}
}
tree[index].isprefix=true;
if(cou==len)
ok=false;
}
int main()
{
tree[0].init();
num=0;
while(scanf("%s",a)!=EOF)
{
if(a[0]=='9')
{
if(ok)
printf("Set %d is immediately decodable\n",p++);
else
printf("Set %d is not immediately decodable\n",p++);
ok=true;
num=0;
tree[0].init();
continue;
}
insert(a);
}
return 0;
}