其他分享
首页 > 其他分享> > HDU 1251 统计难题

HDU 1251 统计难题

作者:互联网

将单词表中所有单词建立一棵字典树,再利用 \(cnt\)数组统计字典树中以每个字母结尾的字符串的个数。因此,在接下来的多次询问中,只需要返回单词最后一个字母对应的\(cnt\)数组值即可。

const int N=5e5+10;
int trie[N][26],cnt[N],idx;

void insert(string word)
{
    int p=0;
    for(int i=0;i<word.size();i++)
    {
        int k=word[i]-'a';
        if(!trie[p][k]) trie[p][k]=++idx;
        p=trie[p][k];
        cnt[p]++;
    }
}

int query(string word)
{
    int p=0;
    for(int i=0;i<word.size();i++)
    {
        int k=word[i]-'a';
        p=trie[p][k];
        if(!p) return 0;
    }
    return cnt[p];
}

int main()
{
    string word;
    while(getline(cin,word))
    {
        if(word.size() == 0) break;
        insert(word);
    }

    while(getline(cin,word))
        cout<<query(word)<<endl;
    //system("pause");
    return 0;
}

标签:难题,HDU,int,字母,cnt,单词,数组,1251,字典
来源: https://www.cnblogs.com/fxh0707/p/14670367.html