統計難題 HDU - 1251(Trie前綴樹)

Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字符串爲前綴的單詞數量(單詞本身也是自己的前綴).
Input
輸入數據的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字符串.

注意:本題只有一組測試數據,處理到文件結束.
Output
對於每個提問,給出以該字符串爲前綴的單詞的數量.
Sample Input
banana
band
bee
absolute
acm

ba
b
band
abc
Sample Output
2
3
1
0

#include <bits/stdc++.h>

using namespace std;
const int N=1e6+5;
int son[N][26],tail[N],cnt=0;
string s;

void Insert()
{
    int now=0;
    for(int i=0;i<s.size();i++)
    {
        int x=s[i]-'a';
        if(son[now][x]==0)
            son[now][x]=++cnt;
        tail[son[now][x]]++;
        now=son[now][x];
    }
}
int query()
{
    int now=0;
    for(int i=0;i<s.size();i++)
    {
        int x=s[i]-'a';
        now=son[now][x];
        if(now==0)
            return 0;
    }
    return tail[now];
}
int main()
{
    while(getline(cin,s),s.size())
    {
        Insert();
    }
    while(cin >> s)
    {
        cout << query() << endl;
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章