AC840. 模拟散列表
寻址法:
为什么要两倍的2的质数
op是字符数组,所以*op代表数组第一个
memset(h,0x3f,sizeof h);为什么不是默认为0x3f3f3f3f.
#include<iostream>
#include <cstring>
using namespace std;
const int N=200003,null=0x3f3f3f3f;
int h[N];
int find(int x){
int k=(x%N+N)%N;//索引
while(h[k]!=null&&h[k]!=x)
{
k++;
if(k==N)k=0;//重新搜索
}
return k;//又返回值
}
int main()
{
int n;
scanf("%d",&n);
memset(h,0x3f,sizeof h);
while(n--)
{
char op[2];
int x;
scanf("%s%d",op,&x);
int k=find(x);
if(*op =='I')h[k]=x;
else{
if(h[k]!=null)puts("Yes");
else puts("No");
}
}
return 0;
}