acwing840模拟散列表,拉链法(模板)
先建一个槽,用公式计算出每一个数对应的槽t,然后每一个槽下吊链表(所有对应公式答案的数)
注意 :
增加链表Insert()函数是插在最上面不是插在最下,这样可以节省修改
板子
#include <bits/stdc++.h> using namespace std; const int N=100005,MOD=100003; int h[N],e[N],ne[N],idx=1,n,x;//h是槽,e,ne,idx是链表模板 char op[4]; void Insert(int x){ int t=(x%MOD+MOD)%MOD;//防止x%mod后是负数 e[idx]=x, ne[idx]=h[t], h[t]=idx++; } bool Query(int x){ int t=(x%MOD+MOD)%MOD; for(int i=h[t];i;i=ne[i]){//遍历串内是否有x if(e[i]==x) return true; } return false; } int main() { scanf("%d",&n); while(n--){ scanf("%s%d",op,&x); if(*op=='I') Insert(x);//插入x else if(Query(x)) printf("Yes\n");//是否有x else printf("No\n"); } return 0; }