http://acm.hdu.edu.cn/showproblem.php?pid=1251
MLE了无数次…用网上别人的代码还是MLE..最后换了种方法
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node
{
int num;
int next[26];
void ini()
{
num=0;
memset(next,-1,sizeof(next));
}
}a[3000000];
int p;
inline void po()
{
a[p=0].ini();
}
inline void insert(char *s)
{
int k=0;
for(int i = 0; s[i]!='\0'; i++)
{
int x=s[i]-'a';
if(a[k].next[x]==-1)
{
a[++p].ini();
a[k].next[x]=p;
}
k=a[k].next[x];
a[k].num++;
}
}
inline int query(char *s)
{
int k=0;
for(int i = 0; s[i]!='\0'; i++)
{
int x=s[i]-'a';
if(a[k].next[x]==-1)
return 0;
k=a[k].next[x];
}
return a[k].num;
}
int main()
{
po();
char s[11];
while(gets(s),*s)
insert(s);
while(gets(s))
printf("%d\n",query(s));
}