數單詞
時間限制:2000 ms | 記憶體限制:120000 kb
難度:4
描述 為了能夠順利通過英語四六級考試,現在大家每天早上都會早起讀英語。
lyh本來以為自己在6月份的考試中可以通過六級,可是沒想到,成績出來以後,居然沒有通過。所以他不得不付出更多的時間來學習英語。
要想通過六級,最基本的要求就是詞彙量。為了能夠更快的記住一些陌生單詞,lyh有時會找一些英語文章來讀。
今天早上,lyh又找了一篇文章。讀之前,他突然萌生出乙個想法:文章中哪些單詞出現的次數最多呢?
輸入 第一行輸入乙個整數t,表示有t組測試資料(1≤t≤200)。
對於每組測試資料,第一行輸入乙個整數n(1≤n≤150),表示lyh要查詢的單詞數量(有些單詞可能會重複出現)。
接下來n行,每行輸入乙個單詞,長度不大於100。
最後一行包含乙個由小寫字母組成的英語文章(字串),長度不大於10^6。
輸出 對於每組資料,第一行輸出乙個整數,表示單詞出現的次數。
然後按照輸入順序,每行輸出乙個出現次數最多的單詞。如果有重複出現的單詞,把它們全部輸出。
樣例輸入
2 3
good
oo one
goodafternooneveryone
1 to
welcometotopcoder
樣例輸出
2 oo
one
2 to
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; //字串string 出現過int次
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()
} while(!q.empty())
} }
};
char text[text_size]; //文字串
char p[p_num][p_size]; //模式串
ahocorasickautomata ac; //結構體
int n, t;
int main()
ac.get_fail(); //得到fail函式
scanf("%s", text); //輸入文字串
ac.find(text); //查詢
int max_cnt = -1;
for(int i = 1; i <= n; i++)
if(ac.cnt[i] > max_cnt)
max_cnt = ac.cnt[i];//找出現最的串的次數
printf("%d\n", max_cnt);
for(int i = 1; i <= n; i++)
if(ac.cnt[mp[string(p[i])]] == max_cnt) //string(p[i])把字串轉化為string型別
printf("%s\n", p[i]);
} return
0;
}
NYOJ 1085 數單詞 (AC自動機模板題)
時間限制 1000 ms 記憶體限制 65535 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的和。根據這個結論,我們...