基础算法 840.模拟散列表(开放寻址法)

值得注意的是,N应选择一个质数,且N的大小应为数据量的两到三倍。

memset函数在cstring库中,是按字节赋值。

可以将数组所有的值赋为0,-1. 但没办法将值赋为1.

#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;
    cin >> n;
    memset(h, 0x3f, sizeof h);
    
    while(n--){
        char op[2];
        int m;
        scanf("%s%d",op, &m);
        int k = find(m);
        if(*op == 'I') h[k] = m;
        else{
            if(h[k] != null) puts("Yes");
            else puts("No");
        }
    }
    return 0;
}

  

posted @ 2022-05-07 10:34  bz-2021  阅读(38)  评论(0)    收藏  举报