比赛 20120614 评测结果 AAWWWWWWWW
题目名称 单词默写 最终得分 20
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-06-14 18:28:47
显示代码纯文本
#include<stdio.h>
#include<string.h>

struct Node
{
	Node *Next[26];
	int k;Node();
};

int n,m,k,l,ans;

char s[11];

Node :: Node()
{
	k=-1;
	for(int i=0;i<26;i++)
	{
		Next[i]=NULL;
	}
}

void dfs(Node *p)
{
	if(p->k>=k)ans++;
	for(int i=0;i<26;i++)
	{
		if(p->Next[i]!=NULL)
		{
			dfs(p->Next[i]);
		}
	}
}

int main()
{
	freopen("engzam.in","r",stdin);
	freopen("engzam.out","w",stdout);
	int i,j;Node *Root=new Node;
	scanf("%d%d\n",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%s %d\n",s,&k);
		l=strlen(s);
		Node *p=new Node;
		p=Root;
		for(j=0;j<l;j++)
		{
			if(p->Next[s[j]-'a']==NULL)
			{
				Node *q=new Node;
				p->Next[s[j]-'a']=q;
				q=NULL;
				delete q;
			}
			p=p->Next[s[j]-'a'];
		}
		p->k=k;
		p=NULL;
		delete p;
	}
	for(i=1;i<=m;i++)
	{
		scanf("%s %d\n",s,&k);
		ans=0;
		l=strlen(s);
		Node *p=new Node;
		p=Root;
		for(j=0;j<l;j++)
		{
			if(p->Next[s[j]-'a']==NULL)
			{
				printf("0\n");
				break;
			}
			p=p->Next[s[j]-'a'];
		}
		dfs(p);
		printf("%d\n",ans);
	}
	return 0;
}