找球号(二)
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;
}