链条法
#include <iostream>
#include <string>
using namespace std;
const int N=1e5+10;//最多有N个操作
int h[N],e[N],ne[N],idx,n;//h数组存该链最后存入的数的位置, e数组存值,ne数组存该链上一个节点的位置
//插入操作
void inset(int x){
int k=(x%n+n)%n;
e[idx]=x;
ne[idx]=h[k];
h[k]=idx++;
}
//查询操作
bool q(int x){
int k=(x%n+n)%n;
for(int i=h[k];i!=-1;i=ne[i]){
if(e[i]==x)return true;
}
return false;
}
int main(){
cin>>n;
memset(h,-1,sizeof(h));
char c[2];
int x;
int m=n;//不能改变n的值
while(m--){
scanf("%s %d",c,&x);
if(c[0]=='I')inset(x);
else {
if(q(x))printf("Yes\n");
else printf("No\n");
}
}
}
用数组实现哈希表
最新推荐文章于 2024-01-11 15:56:00 发布