HDU -1251-统计难题

//注意,节点有很多,数组开到100w最好,否则其他可能会runtime//

AC代码:

#include
#include
#include
#include
using namespace std;
int m,n;
int cur=1;
#define N 1000000
struct node
{
    int ans;
    int next[35];
    void init()
    {
        ans=0;
        memset(next,-1,sizeof(next));
    }
};
node t[N];
void in(char *s,int len)
{
    int p=0;
    for(int i=0; i<len; i++)
    {
        int x=s[i]-'a';
        if(t[p].next[x]==-1)
        {
            t[cur].init();
            t[p].next[x]=cur++;
        }
        p=t[p].next[x];
        t[p].ans++;
    }
}
int getans(char *s,int len)
{
    int p=0;
    for(int i=0; i<len; i++)
    {
        int x=s[i]-'a';
        if(t[p].next[x]==-1)
            return 0;
        p=t[p].next[x];
    }
    return t[p].ans;
}
int main()
{
    char s[35];
    char ss[35];
    t[0].init();
    while(gets(s)&&strlen(s))
    {
        int len1=strlen(s);
        in(s,len1);
    }
    while(gets(ss))
    {
        int len2=strlen(ss);
        int cnt=getans(ss,len2);
        printf("%d\n",cnt);
    }
    return 0;
}

你可能感兴趣的:(ACM)