hdu-2072(字典树)
Posted huangdao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-2072(字典树)相关的知识,希望对你有一定的参考价值。
字典树模板题
代码
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int tot=1; int root; int trie[100500][30]; int flagg[100500]; int visit[100500]; char s[100500]; char t[10050]; int cnt; void init() { memset(flagg,0,sizeof(flagg)); memset(trie,0,sizeof(trie)); memset(visit,0,sizeof(visit)); tot=1;cnt=0; } void build_trie(char *x) { int len=cnt; root=0; for(int i=0;i<len;i++) { int id=x[i]-‘a‘+1; if(!trie[root][id]) trie[root][id]=tot++; root=trie[root][id]; } flagg[root]=1; } bool query(char *x) { int len=cnt; root=0; for(int i=0;i<len;i++) { int id=x[i]-‘a‘+1; if(!trie[root][id]) { return false; } root=trie[root][id]; } if(flagg[root]&&visit[root]==0) { visit[root]=1; return true; } return false; } int main() { while(gets(s)) { if(s[0]==‘#‘) break; init(); int slen=strlen(s); if(s[slen-1]!=‘ ‘) s[slen]=‘ ‘; for(int i=0;i<=slen;i++) { if(s[i]==‘ ‘&&cnt!=0) { build_trie(t);cnt=0; } else if(s[i]!=‘ ‘) { t[cnt++]=s[i]; } } int ans=0; for(int i=0;i<=slen;i++) { if(s[i]==‘ ‘&&cnt!=0) { int flag=query(t);cnt=0; if(flag) ans++; } else if(s[i]!=‘ ‘) { t[cnt++]=s[i]; } } printf("%d ",ans); } }
以上是关于hdu-2072(字典树)的主要内容,如果未能解决你的问题,请参考以下文章