HDU1251 统计难题

来源:互联网 发布:im聊天软件蓝色 编辑:程序博客网 时间:2024/06/05 10:03

第一次见到 以输入空行结束 学到了

#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int trie[400001][26],len,root,tot,sum[400001]; char s[11];//这里的s设为全局变量,插入和查询都是用的这个s void insert(){    len=strlen(s);    root=0;    for(int i=0;i<len;i++)    {        int id=s[i]-'a';        if(!trie[root][id]) trie[root][id]=++tot;  //如果root子节点不含id所表示的字母,那么给trie[root][id]编号         sum[trie[root][id]]++;//sum表示以trie[root][id]为前缀的单词出现的的次数         root=trie[root][id];//更改根节点,继续向下     }}int search(){    root=0;    len=strlen(s);//此时的s为要查询的前缀     for(int i=0;i<len;i++)    {        int id=s[i]-'a';        if(!trie[root][id]) return 0;        root=trie[root][id];    }    return sum[root];}int main(){    while(gets(s)&&strcmp(s,"")!=0){    insert();}while(cin>>s){printf("%d\n",search());}}

原创粉丝点击