思路:
(1)操作有二:
- 输入
- 查询
(2)于是考虑散列表输入查询,采用开放寻址法:首先将数组全部填写为null,插入时,采用质数取模方式进行映射,直到查到空或者相同数值时停下,然后数据赋值;查询时直到查到空或者相同数值时停下,若为空则无,反之则有。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3,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;
cin >> n;
memset(h,0x3f,sizeof h);
while(n --)
{
string op;
cin >> op;
int x;
cin >> x;
int k = find(x);
if(op == "I")
{
h[k] = x;
}
else
{
if(h[k] != null) puts("Yes");
else puts("No");
}
}
return 0;
}