SDUT-1500-(字典树)
2012-08-15 20:54
316 查看
字典树,注意到最后用完字典树的时候把字典树删除,要不容易产生空间不足。
#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> using namespace std; struct list { int leap; struct list *num[26]; }; int number; char str[10]; struct list *code() { int i; struct list *p; p=new list(); p->leap=0; for(i=0;i<26;i++) { p->num[i]=NULL; } return p; } void in(struct list *q,char *s) { struct list *p; p=q; int n,t,i; n=strlen(s); for(i=0;i<n;i++) { t=s[i]-'a'; if(p->num[t]==NULL) p->num[t]=code(); p=p->num[t]; } p->leap=1; } void search(struct list *q,char *s) { struct list *p; p=q; int n,i,t; n=strlen(s); for(i=0;i<n;i++) { t=s[i]-'a'; if(p->num[t]==NULL) break; p=p->num[t]; } if(p->leap==1) number--; p->leap=0; } void strr(char *s) { int n,i; n=strlen(s); for(i=0;i<n;i++) { if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+'a'-'A'; } } void del(struct list *p) { int i; if(p) { for(i=0;i<26;i++) { if(p->num[i]) del(p->num[i]); } } free(p); p=NULL; } int main() { int m,n,i; while(cin>>n,n) { number=n; cin>>m; getchar(); struct list *tree; tree=code(); for(i=0;i<n;i++) { gets(str); strr(str); in(tree,str); } for(i=0;i<m;i++) { gets(str); strr(str); search(tree,str); } printf("%d\n",number); del(tree); } return 0; }
相关文章推荐
- SDUT 1500 Message Flood(字典树 && 模板)
- SDUT1500_Message Flood(字典树)
- sdut 1500 Message Flood
- sdut1500 Message Flood
- oj1500(Message Flood)字典树
- SDUT 1500 Message Flood
- sdut 1500 Message Flood
- sdut 1500 Message Flood(Trie树)
- A(SDUT-OJ 2892)----字典树
- SDUT 1500 Message Flood trie树
- SDUT1500Message Flood(字典树)
- SDUT 2828 字典树
- SDUT 1500 Message Flood
- SDUT_3039 迷之好奇 【字典树】
- SDUT 1500-Message Flood(set)
- 第六届山东省赛I题 Routing Table 字典树 NEU 1588 & UPC 3116 & SDUT 3259
- sdut 1500 Message Flood
- 字典树sdutoj 1500模板
- SDUTOJ 1500 ——Message Flood 字典树或map
- SDUT 1500-Message Flood(set)