0
点赞
收藏
分享

微信扫一扫

nyoj 找球号(二) 138 (Hash表)机智 一种新思想


找球号(二)

1000 ms  |  内存限制: 65535


5




第一行有一个整数n(0<n<=10000);

随后有n行;


每行可能出现如下的任意一种形式:


第一种:


一个字符串"ADD",接着是一个整数m,随后有m个i;


第二种:


一个字符串"QUERY”,接着是一个整数M,随后有M个ki;



输出 输出每次询问的结果"YES"或"NO". 样例输入

2 ADD 5 34 343 54 6 2 QUERY 4 34 54 33 66


样例输出

YES YES NO NO

 

//初见Hash表的题

#include<stdio.h>
#include<string.h>
#define N 1000000
#define M 20003
int head[N],top;
int hash[N];
int next[N];
void add(int x)
{
	int i=x%M;
	hash[top]=x;
	next[top]=head[i];
	head[i]=top++;
}
int main()
{
	int t,n,m,i,j;
	char s[6];
	while(scanf("%d",&t)!=EOF)
	{
		top=0;
		memset(head,-1,sizeof(head));
		while(t--)
		{
			scanf("%s",s);
			if(strcmp(s,"ADD")==0)
			{
				scanf("%d",&n);
				for(i=1;i<=n;i++)
				{
					scanf("%d",&m);
					add(m);
				}
			}
			else
			{
				scanf("%d",&n);
				while(n--)
				{
					int flag=0;
					scanf("%d",&m);
					for(int i=head[m%M];i!=-1;i=next[i])
					{
						if(hash[i]==m)
						{
							flag=1;
							break;
						}
					}
					if(flag)
						printf("YES\n");
					else
						printf("NO\n");
				}
			}
		}
	}
	return 0;
}

 

举报

相关推荐

0 条评论