poj 2001 Shortest Prefixes(字典树)

来源:互联网 发布:会声会影软件安装包 编辑:程序博客网 时间:2024/05/01 18:40


poj 2001 Shortest Prefixes


找唯一能识别字符串的前缀


#include<stdio.h>#include<string.h>#define MAXN 20005struct trie{int ch[MAXN][26];int val[MAXN];int sz;void ini() {sz=1;memset(ch[0],0,sizeof(ch[0]));}int get_id(char c) {return c-'a';}int i,j;void insert(char *s){int len=strlen(s),pre=0,next;for(i=0;i<len;i++){next=get_id(s[i]);if(!ch[pre][next]){memset(ch[sz],0,sizeof(ch[sz]));val[sz]=0;ch[pre][next]=sz++;}pre=ch[pre][next];val[pre]++;}}void query(char *s){int len=strlen(s),pre=0,next;for(i=0;i<len;i++){next=get_id(s[i]);printf("%c",s[i]);if(val[ch[pre][next]]==1) return ;pre=ch[pre][next];}}};char s[1005][25];trie t;int main(){t.ini();int i,n=0;while(scanf("%s",s[n])!=EOF){t.insert(s[n++]);}for(i=0;i<n;i++){printf("%s ",s[i]);t.query(s[i]);printf("\n");}return 0;}


0 0