tips:
1.离散化强调“保序性”,即映射之前如果具有小于关系,映射之后仍需要保证小于关系。
2.代码是逻辑的实现,拉链法就是用物理空间解决逻辑上的冲突。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=100003; int h[N],e[N],ne[N],idx; //定义为全局变量会自动初始化 /* 每个元素对应唯一一个编号,用这个编号来关联所有的信息, e数组用这个编号存这个元素的值,ne数组用这个编号存插入时链中另一元素的编号。 */ void insert(int x){ int k=(x%N+N)%N; e[idx]=x; ne[idx]=h[k]; h[k]=idx++; } //下标和数组被赋予的内涵,你逻辑想法的落脚点(实现方式),由抽象到具体。 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; scanf("%d",&n); memset(h,-1,sizeof(h)); while(n--){ char op[2]; int x; scanf("%s%d",&op,&x);//scanf读入字符串,过滤空格 if(*op == 'I') insert(x); else{ if(find(x)) puts("Yes"); else puts("No"); } } return 0; }View Code
ps:
学会编程语言实现,然后脱离语言,摆脱编程语言的束缚,自然语言思考