题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=138
这道题需要用到哈希表算法,算是hash的入门题了吧,需要注意的是数组需要开的稍微大点,不懂的手动模拟一下那三个数组的用途就好了...
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define mod 100001
#define maxn 1000005
using namespace std;
int Hash[maxn],Next[maxn],Head[maxn];
int n,m;
int num;
string str;
void Add(int x){
int key = x % mod;
Next[num] = Head[key];
Head[key] = num;
Hash[num] = x;
num++;
}
bool Query(int x){
int key = x % mod;
for(int i=Head[key];i>-1;i=Next[i]){
if(Hash[i] == x){
return true;
}
}
return false;
}
int main()
{
scanf("%d",&n);
num = 0;
memset(Head,-1,sizeof(Head));
while(n--){
cin>>str;
if(str == "ADD"){
scanf("%d",&m);
for(int i=0;i<m;i++){
int x;
scanf("%d",&x);
Add(x);
}
}
else{
scanf("%d",&m);
for(int i=0;i<m;i++){
int x;
scanf("%d",&x);
if(Query(x)) printf("YES\n");
else printf("NO\n");
}
}
}
return 0;
}