题目链接:hdu1251
用c++交a,用g++会memery 超限
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int cnt;
struct node *next[26];//每层最多多少种类的数。
node(){
cnt=0;
memset(next,0,sizeof(next));
}
};
node *root=NULL;
void buildtrie(char *s)
{
node *p=root;
node *tmp=NULL;
int l=strlen(s);
for(int i=0;i<l;i++)
{
if(p->next[s[i]-'a']==NULL)//没有找到此字母,插入。
{
tmp=new node;
p->next[s[i]-'a']=tmp;
}
p=p->next[s[i]-'a'];
p->cnt++;
}
}
void findtrie(char *s)
{
node *p=root;
int l=strlen(s);
for(int i=0;i<l;i++)
{
if(p->next[s[i]-'a']==NULL)
{
printf("0\n");
return;
}
p=p->next[s[i]-'a'];
}
printf("%d\n",p->cnt);
}
int main()
{
char s[11];
root=new node;
while(gets(s))
{
if(strcmp(s,"")==0) break;
buildtrie(s);
}
while(scanf("%s",s)!=EOF)
{
findtrie(s);
}
}