题目描述
模板
样例
import java.util.*;
/*
如何找大于x的第一个质数
for(int i = x; ;i++){
boolean flag = true;
for(int j = 2; j*j <= i ;j++){
if(i % j == 0){
flag = false;
break;
}
}
if(flag){
System.out.println(i);
break;
}
}
*/
public class Main{
//取模的数 最好是质数 而且这个数(开放寻址法哈希表数组的大小)最好是操作数的两倍
static int N = 200003;
//nulls用来表示一个大于数据范围的数 为了表明这个坑是没人的
static int nulls = 0x3f3f3f3f;
static int[] h = new int[N];
public static int find(int x){
//模N + N,再去模N 防止负数
int k = (x % N + N) % N;
//这个坑有人且这个坑的人不等于x
while(h[k] != nulls && h[k] != x){
//往后看
k ++;
//如果k==n 也就看完最后一个坑位,循环看第一个坑位
if(k == N) k = 0;
}
//两种含义:1.如果x在哈希表中,返回的k就是x在哈希表的下标 2.如果x不在哈希表中,返回的k就是x在哈希表存储的位置
return k;
}
public static void main(String[] args){
Arrays.fill(h, nulls);
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();
while(n -- > 0){
String s = sc.next();
int x = sc.nextInt();
int k = find(x);
if(s.equals("I")){
h[k] = x;
}else{
if(h[k] != nulls)System.out.println("Yes");
else System.out.println("No");
}
}
}
}