当前位置: 代码迷 >> 综合 >> HDU 1251 字典树裸模板
  详细解决方案

HDU 1251 字典树裸模板

热度:99   发布时间:2024-01-20 20:33:49.0

以前也写过字典树,觉得自己写得很不好,很水很弱,虽然也ac了。

网上看了下别人的模板,果断学习之.......

#include<iostream>
#include<string.h>
#include<cstdio>
#define MAX 26 
using namespace std;struct TrieNode
{int nCount;TrieNode  *next[MAX];
};TrieNode Memory[1111111];
int allocp=0;void InitTrieRoot( TrieNode **pRoot )
{*pRoot=NULL; 
} TrieNode *CreateTrieNode()
{int i;TrieNode *p;p=&Memory[allocp++];p->nCount=1;for( i=0;i<MAX;i++ )p->next[i]=NULL;return p;
}void InsertTrie( TrieNode **pRoot,char *s )
{int i,k;TrieNode *p;if( !(p=*pRoot) )p=*pRoot=CreateTrieNode();i=0;while( s[i] ){k=s[i++]-'a';if( p->next[k] )p->next[k]->nCount++;elsep->next[k]=CreateTrieNode();p=p->next[k];}
}int SearchTrie( TrieNode **pRoot,char *s )
{TrieNode *p;int i,k;if( !(p=*pRoot) )return 0;i=0;while( s[i] ){k=s[i++]-'a';if( p->next[k]==NULL )return 0;p=p->next[k]; }return p->nCount;
}int main()
{char s[11];TrieNode *Root=NULL;InitTrieRoot(&Root);while( gets(s)&&s[0] )InsertTrie(&Root,s);while( gets(s) )printf( "%d\n",SearchTrie(&Root,s) );return 0; 
}


  相关解决方案