#include <iostream>
#include <cstring>
using namespace std;
const int N=100003;
//h存放多个字链表的头指针
int h[N];
//存放每个值,并且会被拆成多个数组
int e[N];
//存放每个链表的元素的下一个元素的位置(e数组的下标)
int ne[N];
//和单链表一样是用来存正在操作的指针
int idx;
//插入元素 他输入的的范围是-N~N 但是你需要用只有大小为N的散列表去存放这些值,所以就要//hash将数据结构弄得和java的hashmap一样,
void insert(int x){
int q=(x%N+N)%N;
e[idx]=x;
ne[idx]=h[q];
h[q]=idx++;
}
//查找元素
int find(int x){
int q=(x%N+N)%N;
for(int i=h[q];i!=-1;i=ne[i]){
if(e[i]==x){
return 1;
}
}
return -1;
}
int main(){
int n;
char op[5];
scanf("%d",&n);
memset(h,-1,sizeof(h));
int x;
int flag;
while(n--){
scanf("%s",op);
if(strcmp("I",op)==0){
scanf("%d",&x);
insert(x);
}
else if(strcmp("Q",op)==0){
scanf("%d",&x);
flag =find(x);
if(flag==1){
printf("Yes\n");
}
else {
printf("No\n");
}
}
}
}
他输入的的范围是-N~N 但是你需要用只有大小为N的散列表去存放这些值,所以就要//hash将数据结构弄得和java的hashmap一样,一个h数组里的元素对应着一个链表的头指针。
题目: