hdu1251统计难题(字典树模版)

来源:互联网 发布:最流行编程语言 编辑:程序博客网 时间:2024/05/16 05:23

http://acm.hdu.edu.cn/showproblem.php?pid=1251

#include<iostream>#include<string>#include<cstdio>using namespace std;struct Tire{    int num;//相同前缀的字符串个数    Tire *next[26];//26个字母}Node;Tire *head;//头结点void Insert(string s)//插入字典树{    Tire *T=head,*t;    int i,j;    for(i=0;i<s.size();i++)    {        int id=s[i]-'a';        if(T->next[id]==NULL)        {            t=new Tire;            for(j=0;j<26;j++)            {                t->next[j]=NULL;            }            t->num=0;            T->next[id]=t;        }        T=T->next[id];        T->num++;    }}int Find(string s)//搜索相同前缀的字符串个数{    Tire *T=head;    int count,i;    for(i=0;i<s.size();i++)    {        int id=s[i]-'a';        if(T->next[id]==NULL)        {            count=0;            break;        }        else         {            T=T->next[id];            count=T->num;        }    }    return count;}int main(){    char s[15];    int i;    head=new Tire;    for(i=0;i<26;i++)    {        head->next[i]=NULL;        head->num=0;    }    while(gets(s),strcmp(s,""))    {        Insert(s);    }    while(gets(s))    {        cout<<Find(s)<<endl;    }    return 0;}



0 0