首页 > 其他 > 详细

HDU 1251 统计难题

时间:2021-04-17 17:09:51      阅读:20      评论:0      收藏:0      [点我收藏+]

将单词表中所有单词建立一棵字典树,再利用 \(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 1251 统计难题

原文:https://www.cnblogs.com/fxh0707/p/14670367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!