sdut 1500 Message Flood(Trie树)
2012-08-13 20:36
369 查看
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1500
View Code
View Code
#include<iostream> #include<cstdio> #include<cstring> #include<stdlib.h> using namespace std; struct node { int flag; node *next[26]; }; int num; node *build() { node *p; int i; p=new node; p->flag=0; for(i=0;i<26;i++) p->next[i]=NULL; return p; } void insert(node *p, char *s) { int len,i,t; len=strlen(s); for(i=0;i<len;i++) { if(s[i]>='A'&&s[i]<='Z') t=s[i]-'A'; else t=s[i]-'a'; if(p->next[t]==NULL) p->next[t]=build(); p=p->next[t]; } p->flag=1; } int search(node *p,char *s) { int t,i,len; len=strlen(s); for(i=0;i<len;i++) { if(s[i]>='A'&&s[i]<='Z') t=s[i]-'A'; else t=s[i]-'a'; if(p->next[t]==NULL) return 0; p=p->next[t]; } if(p->flag==1) { num++; p->flag=-1; return 1; } return 0; } void deal(node *p) { int i; if(p) { for(i = 0 ;i < 26 ; i++) if(p->next[i]) deal(p->next[i]); } free(p); p=NULL; } int main() { int m,n,i,k; char str[25]; node *p; while(~scanf("%d",&m)) { if(m==0) break; scanf("%d",&n); p=build(); num=0; for(k=1;k<=m;k++) { scanf("%s",str); insert(p,str); } while(n--) { scanf("%s",str); search(p,str); } printf("%d\n",m-num); deal(p); } return 0; }
相关文章推荐
- SDUT 1500 Message Flood
- sdut 1500 Message Flood
- SDUT 1500-Message Flood(set)
- SDUT 1500 Message Flood(字典树 && 模板)
- SDUT 1500-Message Flood(set)
- SDUT 1500 Message Flood
- sdut 1500 Message Flood
- sdut1500 Message Flood
- SDUT1500_Message Flood(字典树)
- sdut 1500 Message Flood
- NOJ 1121 Message Flood (Trie树 或者 map)
- 1500_Message Flood
- SDUT-1500-(字典树)
- oj1500(Message Flood)字典树
- SDUTOJ 1500 ——Message Flood 字典树或map
- 【1500】Message Flood (SDUTOJ)
- SDUT 1500 Message Flood trie树
- 【1500】Message Flood (SDUTOJ)
- SDUT 2543 整除
- 分数四则运算(Java)acm.sdut