トピックへのリンク:http://codevs.cn/problem/4189/
#include <iostreamの> する#include <CStringの> する#include <cstdioを> の#define MEM(A、B)のmemset(A、B、はsizeof(a)参照)。 使用して 名前空間はstdを、 typedefの長い 長いLL。 const int型 MAXN = 500005 ; constの LL INF = 0x3f3f3f3f 。 INTの TOT、N、トライ[MAXN] [ 26 ]、和[MAXN]。 BOOL VIS [MAXN]、フラグ。 ボイド挿入(CHAR * sで、INT RT) { int型 LEN = STRLEN(S)。 以下のための(int型I = 0 ; 私はLEN <; I ++ ) { int型のk = sの[I] - [ A ' 。 もし(トライ[RT] [K] == 0)トライ[RT] [K] = ++ TOT。 和[トライ[RT] [K] ++ ; RT = トライ[RT] [K]。 } } int型(検索文字 * sで、INT RT) { int型 LEN = STRLEN(S)。 以下のために(int型 i = 0 ; iがLEN <; iは++ ) { int型のk = S [I] - [" ; RT = トライ[RT] [K]。 もし(室温== 0)を返す 偽。 } を返す 真。 } int型のmain() { TOT = 0 。 int型 RT = 0 ; チャー S [ 105 ]。 int型のn; cinを >> N; 以下のために(int型 i = 1 ; iが++; iが<= N ){ CIN >> S。 挿入(S、RT)。 } CIN >> N。 以下のために(int型 i = 1 ; iが++; iが<= N ){ CIN >> S。 もし(検索(S、RT))はcout << " YES " << てendl; 他の裁判所未満<< " NO " << てendl; } 戻り 0 。 }