与1671差不多。
不懂为什么加上了清空内存的函数,程序会死掉。
注释掉就AC了
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
struct Trie
{
int flag;
Trie *next[2];
};
Trie *root;
void buildTrie(char *str)
{
int len = strlen(str);
Trie *p=root,*q;
for(int i=0;i<len;i++){
int rt=str[i]-'0';
if(p->next[rt]==NULL){
q = new Trie;
q->flag=1;
for(int j=0;j<2;j++)
q->next[j]=NULL;
p->next[rt]=q;
p=p->next[rt];
}
else{
// p->next[rt]->flag++;
p=p->next[rt];
}
}
p->flag=-1;
}
int findTrie(char *str)
{
Trie *p=root;
int len=strlen(str);
for(int i=0;i<len;i++){
int rt=str[i]-'0';
p=p->next[rt];
if(p==NULL)
return 0;
if(p->flag==-1)
return -1;
}
return -1;
}
void del(Trie *root)
{
for(int i=0;i<2;i++){
if(root->next[i]!=NULL)
del(root->next[i]);
}
delete root;
}
int main()
{
char str[15];
int T=1,i,n;
bool flag;
while(cin>>str){
flag=0;
root = new Trie;
for(i=0;i<2;i++)
root->next[i]=NULL;
while(str[0]!='9'){
if(findTrie(str)==-1)
flag=1;
buildTrie(str);
cin>>str;
}
if(!flag)
cout<<"Set "<<T++<<" is immediately decodable"<<endl;
else
cout<<"Set "<<T++<<" is not immediately decodable"<<endl;
// del(root);
}
return 0;
}