トライ辞書木、hdu1251

参考ブログ:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html

単語トライ単語を形成するためにエンドノードへの経路に沿って、木であり、単語の接頭辞は、この経路に含まれています。一般的なオペレーティングトライは、前方一致検索を持っており、単語や語句を挿入します。

hdu1251辞書ツリーのテンプレートリンク:http://icpc.njust.edu.cn/Problem/Hdu/1251/

 

コードは以下の通りである:ノートへの唯一の場所は、データに読み込まれ、関数は読み込み取得がNULLの場合、空白行を読みます

1の#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3符号なしのtypedef int型のUI。
4のtypedef 長い LL。
5符号なしのtypedef 長い 長いULL。
6  の#define PFのprintf
 7  の#define MEM(A、B)のmemset(A、B、はsizeof())
 8  の#define prime1 1E9 + 7
 9  の#define prime2 1E9 + 9
 10  の#define PI 3.14159265
 11  の#define LSON Lを、半ば、室温<< 1
 12  の#define rson半ば+ 1、R、RT << 1 | 1
13  の#define scand(X)のscanf( "%のLLF"、&x)は 
 14  の#define F(I、B)のための(INT iは=; I <= B; I ++)
 15  の#defineスキャン()のscanf( "%のD"、&A)
 16  の#define DBG(引数)COUT <<#引数<< ":" <<引数<< ENDL。
17  の#define INF 0x3f3f3f3f
 18  CONST  INT MAXN = 1E6 + 10 19  整数N、M、T。
20  チャーS [MAXN]、S1 [MAXN]。
21  INTトライ[MAXN] [ 26 ]、和[MAXN]。
22  INT CNT = 0  S)
 24  {
 25      INT RT = 0 26      INT LEN = STRLEN(S)。
27      F(I、0、len- 1 28      {
 29          INT C = S [I] - ' ' 30 であれば(トライ[RT] [C]!)トライ[RT] [C] = ++ CNT。
31          RT = トライ[RT] [C]。
32          和[RT] ++ ;
33     }
 34 }
 35 int型の検索(CHAR * S)
 36 {
             37      INT RT = 0 38      INT LEN = STRLEN(S)。
39      F(I、0、len- 1 40      {
 41          INT C = S [I] - ' ' 42 であれば(トライ[RT] [C]!)戻り0 ;
43          RT = トライ[RT] [C]。
44     }
 45 リターン和[RT]。
46 }
 47 のint main()の
 48 {
 49 // freopenは( "INPUT.TXT"、 "R"、標準入力)。
50                             // freopenは( "output.txtと"、 "W"、STDOUT); 
51である      STD :: :: IOSのsync_with_stdio(偽の52は     、一方((S)取得)
 53は     、{
 54は         IF(S [ 0 ] == NULL)BREAK ; // 空白行に読み込まれますがNULLに変換される
55          INSERT(S)
 56である     }
 57は     、一方((S)取得)
 58      {
 59          PF(" %のD \ N- " 、(S)検索);
 60      }
 61   }

 

おすすめ

転載: www.cnblogs.com/randy-lo/p/12541655.html