NYOJ 1085 數單詞 (AC自動機模板題)

2021-06-26 00:59:27 字數 1353 閱讀 7505

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:4 描述

為了能夠順利通過英語四六級考試,現在大家每天早上都會早起讀英語。

lyh本來以為自己在6月份的考試中可以通過六級,可是沒想到,成績出來以後,居然沒有通過。所以他不得不付出更多的時間來學習英語。

要想通過六級,最基本的要求就是詞彙量。為了能夠更快的記住一些陌生單詞,lyh有時會找一些英語文章來讀。

今天早上,lyh又找了一篇文章。讀之前,他突然萌生出乙個想法:文章中哪些單詞出現的次數最多呢?

輸入第一行輸入乙個整數t,表示有t組測試資料(1≤t≤200)。

對於每組測試資料,第一行輸入乙個整數n(1≤n≤150),表示lyh要查詢的單詞數量(有些單詞可能會重複出現)。

接下來n行,每行輸入乙個單詞,長度不大於100。

最後一行包含乙個由小寫字母組成的英語文章(字串),長度不大於10^6。

輸出對於每組資料,第一行輸出乙個整數,表示單詞出現的次數。

然後按照輸入順序,每行輸出乙個出現次數最多的單詞。如果有重複出現的單詞,把它們全部輸出。

樣例輸入

2

3good

ooone

goodafternooneveryone1to

welcometotopcoder

樣例輸出

2

ooone

2to

分析:這就是乙個ac自動機模板題,要注意的是查詢的單詞中,乙個單詞可能會出現多次,這裡要處理一下。

#include #include #include #include #include #include using namespace std;

#define sigma_size 26 //文字串字元內容

#define maxnode 20000 //節點數量

#define text_size 1000005 //文字串長度

#define p_size 100 //模式串長度

#define p_num 200 //模式串數量

map mp;

struct ahocorasickautomata

int idx(char c)

void insert(char *s,int v)

u = ch[u][c];

}val[u] = v;

mp[string(s)] = v;

}void print(int j)

}void find(char *t)

}void get_fail()

return 0;

}

NYOJ 1085 數單詞 AC自動機模板

數單詞 時間限制 2000 ms 記憶體限制 120000 kb 難度 4 描述 為了能夠順利通過英語四六級考試,現在大家每天早上都會早起讀英語。lyh本來以為自己在6月份的考試中可以通過六級,可是沒想到,成績出來以後,居然沒有通過。所以他不得不付出更多的時間來學習英語。要想通過六級,最基本的要求就...

單詞統計 AC自動機

1118.單詞統計 time limit 1000 ms memory limit 32768 kb total submission s 12 accepted submission s 1 description 給定乙個字串和若干個單詞,統計這些單詞在這個字串中出現的次數。input 第一行為...

BZOJ 3172 單詞 (AC自動機)

這道題是個裸的ac自動機,但是我還是調了很久qaq。首先如果我們直接用每個單詞來匹配的,時間不是很理想。這道題要用到ac自動機的衍生物 fail樹 我也是做這道題才知道有這個東西 fail樹有這麼乙個結論 乙個字串出現的次數等於以它為根節點的fail樹的子樹中所有節點的cnt的和。根據這個結論,我們...