题目:http://acm.hdu.edu.cn/showproblem.php?pid=1251
输入时空行判断
while (1)
{
gets(a);
if (a[0]=='\0')
break;
}
注意:
输入的字符数组不用二维记录。。。
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char a[1000+5],c[1000+5];
struct node
{
int count; //以此为前缀的个数
bool exist; //是否是一个单词
struct node* next[26];
};
node* root;
node* build()//!!!
{
int i;
node* p;
p=new node;
for (i=0;i<26;i++)
p->next[i]=NULL;
p->count=0;
p->exist=false;
return p;
}
void update()
{
int i;
node* p;
p=root;
for (i=0;i<strlen(a);i++)
{
if (p->next[a[i]-'a']==NULL)
p->next[a[i]-'a']=build();
p=p->next[a[i]-'a'];
p->count++;
if (i==strlen(a)-1)
p->exist=true;
}
}
int query()
{
int i;
node* p;
p=root;
for (i=0;i<strlen(c);i++)
{
if (p->next[c[i]-'a']==NULL)
return 0;
p=p->next[c[i]-'a'];
if (i==strlen(c)-1)
return p->count;
}
}
int main()
{
int i=0;
freopen("a.txt","r",stdin);
root=build();
while (1)
{
gets(a);
if (a[0]=='\0')
break;
update();
}
while (scanf("%s",&c)!=EOF)
{
printf("%d\n",query());
}
return 0;
}