- 由题意到x是[-1e9,1e9],我们要将x映射到[0,1e5)
- 这种映射过程可以使用哈希函数hash(x)将x映射到对应的坑位,并使用哈希表存储映射后的x,这里的存储我们选用拉链法将映射到同一个坑位的数串起来; 哈希表又称为散列表
- 比如: hash(4)=4%3=1,那么4就映射到坑位1; hash(7)=7%3=1,那么7也映射到坑位1,然后就将4和7使用单链表串在坑位1
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100003;
int h[N], e[N], ne[N], idx;
int hash_f(int x)
{
return (x % N + N) % N;
}
void insert(int x)
{
int i = hash_f(x);
e[idx] = x;
ne[idx] = h[i];
h[i] = idx ++ ;
}
bool find(int x)
{
int j = hash_f(x);
for (int i = h[j]; i != -1; i = ne[i])
if (e[i] == x)
return true;
return false;
}
int find_mod()
{
int i;
for (i = 1e5; ; i ++ )
{
bool flag = true;
for (int j = 2; j * j <= i; j ++ )
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag) return i;
}
}
int main()
{
memset(h, -1, sizeof h);
int n;
cin >> n;
while (n -- )
{
char op;
int x;
cin >> op >> x;
if (op == 'I') insert(x);
else if (op == 'Q') cout << (find(x) ? "Yes" : "No") << endl;
}
return 0;
}