問題の説明
現代の時間では、検索エンジンはグーグルなど、百度、などの皆様の生活に入って来た
Wiskeyも彼のイメージ検索システムにこの機能を持って望んでいます。
すべての画像は、ユーザーが画像を見つけるためにいくつかのキーワードを入力すると、システムがイメージの説明をキーワードに一致し、ほとんどのキーワードが一致する画像が表示されます、長い説明があります。
あなたのイメージの説明、およびいくつかのキーワードを与え、問題を単純化するために、あなたはどのように多くのキーワードが一致するだろう私に教えてください。
Wiskeyも彼のイメージ検索システムにこの機能を持って望んでいます。
すべての画像は、ユーザーが画像を見つけるためにいくつかのキーワードを入力すると、システムがイメージの説明をキーワードに一致し、ほとんどのキーワードが一致する画像が表示されます、長い説明があります。
あなたのイメージの説明、およびいくつかのキーワードを与え、問題を単純化するために、あなたはどのように多くのキーワードが一致するだろう私に教えてください。
入力
最初の行は1つの整数によって従いますどのように多くの場合意味が含まれます。
各ケースはNキーワードの数を意味し、N個のキーワードが続く2つの整数を含んでいます。(N <= 10000)
各キーワードは、文字「A」が含まれます- 「Z」を、長さが50よりも長くしないであろう
最後の行が記述され、そして長さが1000000よりも長くしないであろう。
各ケースはNキーワードの数を意味し、N個のキーワードが続く2つの整数を含んでいます。(N <= 10000)
各キーワードは、文字「A」が含まれます- 「Z」を、長さが50よりも長くしないであろう
最後の行が記述され、そして長さが1000000よりも長くしないであろう。
出力
説明に含まれているどのように多くのキーワードを印刷します。
サンプル入力
1 5彼女は彼が彼女のyasherhs SHR言います
サンプル出力
3
著者
Wiskey
推薦します
1の#include <stdio.hの> 2の#include <iostreamの> 3の#include <アルゴリズム> 4の#include < 文字列・H> 5の#include <STDLIB.H> 6の#include <math.h>の 7の#include <キュー> 8の#include < 設定 > 9 10 の#define 0x3f3f3f3f INF 11 の#define PII対<整数、整数> 12 使用 名前空間STDを、 13 のconst int型 MAXN = 1E6 + 10 。 14 15 CHAR ; MAXN] BUF 16 構造体ac_automation { 17 INT次の[MAXN] [ 26 ]、[MAXN] [MAXN]、終了に失敗し、 18 INTの根、L。 19 int型newnode(){ 20 のために(int型 i = 0 ; iは< 26 ; iは++ ) 21 { 22 次の[L] [I] = - 1 。 23 } 24 端[L ++] = 0 ; 25 リターン L- 1 。 26 } 27 ボイドのinit(){ 28 L = 0 。 29 ルート= newnode()。 30 } 31 空隙インサート(CHAR BUF []){ 32 INT LEN = STRLEN(BUF)。 33 int型になりました= ルート。 34 のためには、(int型 = Iを0 ; iがLEN <; iは++ ){ 35 であれば(次の[今] [BUF [I] - ' ' ] == - 1 ) 36 次の[今] [BUF [I] - [ ' ] = newnode()。 37 今=次の[今] [BUF [I] - ' ' ]。 38 } 39 終わり[今や] ++ ; 40 } 41 空隙ビルド(){ 42 キュー< INT > Q。 43 [ルート] =失敗ルートと、 44 のために(int型 I = 0 ; iが< 26 ; iが++ ) 45 { 46の場合(次の[ルート] [I] == - 1 ) 47 次の[ルート] [I] = 根。 48 他 { 49 [次の[ルート] [I] =失敗ルートと、 50 Q.push(次の[ルート] [I])。 51 } 52 } 53 ながら(!Q.empty()){ 54 INT今= Q.front()。 55 Q.pop()。 56 のためには、(int型 i = 0 ; iは< 26 ; iは++ ){ 57 であれば(次の[今] [I] == - 1 ) 58 次の[今] [I] = 次の[失敗[今] [I]; 59 他に{ 60 失敗[次の[今] [I] = 次の[I] [今] [失敗]。 61 Q.push(次の[今] [I])。 62 } 63 } 64 } 65 } 66 INT querry(CHAR BUF []){ 67 INT LEN = STRLEN(BUF)。 68 int型になりました= ルート。 69の int型の RES = 0 ; 70 のために(int型 I = 0 ; iがLEN <I ++は{) 71 -今=次の[今] [I] [BUF ' A" ]; 72 int型温度= 今; 73 ながら(!TEMP = ルート){ 74の RES + = 終わり[TEMP]。 75 エンド[TEMP] = 0 ; 76 TEMP = [TEMP]を失敗。 77 } 78 } 79の リターンRES。 80 } 81 } AC。 82 83 INT メイン(){ 84 のint T。 85 のscanf(" %dの"、&T)。 86 一方、(T-- ){ 87 INT N。 88 のscanf(" %d個"、&N) 89 ac.init()。 90 のために(int型 I = 0 ; iがN <I ++は{) 91 のscanf(" %sの" 、BUF)。 92 ac.insert(BUF)。 93 } 94 ac.build()。 95 のscanf(" %sの" 、BUF)。 96 のprintf(" %d個の\ n "、ac.querry(BUF))。 97 } 98 リターン 0 。 99 }