题意:给你几个串,如果这些串中不存在一个串是另一个串的前缀,就说明这一组串是immediately decodable,反之则不是。
思路:先把所有串全部插入,然后来一个循环判断每个单词结尾处的cnt与1的大小关系,大于1的话说明这个串是某一个或者某几个串的前缀,那么就是not immediately decodable。
代码:
View Code
#include#include #include #include #include #include #include #include using namespace std;const int maxn=2;struct node{ int cnt; node *next[maxn]; node() { cnt=0; for(int i=0;i next[id]==NULL) loca->next[id]=new node(); loca->next[id]->cnt++; loca=loca->next[id]; } } int search(char *s) { node *loca=root; for(int i=0;s[i];i++) { int id=s[i]-'0'; if(loca->next[id]==NULL) return 0; loca=loca->next[id]; } return loca->cnt; }};int main(){ char str[15][15]; int line=0,cnt=1; while(~scanf("%s",str[line])) { Trie t; t.insert(str[line++]); while(scanf("%s",str[line])) { if(str[line][0]=='9') break; t.insert(str[line++]); } bool flg=false; for(int i=0;i 1) { flg=true; break; } } printf("Set %d is ",cnt++); if(flg) printf("not "); printf("immediately decodable\n"); line=0; } return 0;}
善待每一天,努力做好自己。
欢迎转载,注明出处。