下面展示一些 内联代码片
。
//开放寻址法
#include<iostream>
#include<cstring>
using namespace std;
const int N =200003;//多开2~3倍
int h[N],null = 0x3f3f3f3f;
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(){
memset(h,0x3f,sizeof h);
int n;
cin>>n;
//初始化很重要
while(n--){
string a;
int x;
cin>>a>>x;
if(a=="I") h[find(x)] = x;
else {
if(h[find(x)] == null) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
}
//拉链法
#include<iostream>
#include<cstring>
using namespace std;
const int N =100003;
int h[N],e[N], ne[N],idx;//
void insert(int x){
int k = (x%N +N) %N;
e[idx] = x;
ne[idx] = h[k];
h[k] = idx++;
return;
}
bool find(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(){
int n;
cin>>n;
memset(h,-1,sizeof h);//初始化很重要
while(n--){
string a;
cin>>a;
if(a=="I"){
int k;
cin>>k;
insert(k);
}
else {
int w;
cin>>w;
if(!find(w)) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
}