数据结构 | 哈希表二次探查法 : 1078
强行考了二次探查法,一脸蒙蔽
#include <stdio.h> #include <memory.h> #include <math.h> #include <string> #include <vector> #include <set> #include <stack> #include <queue> #include <algorithm> #include <map> #define I scanf #define OL puts #define O printf #define F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 1010 #define MAX (1<<30)-1 #define V vector<int> typedef long long ll; using namespace std; bool isPrime(int x){ if(x<=1) return 0; for(int i=2;i<=sqrt(x);i++){ if(x%i==0) return 0; } return 1; } int Hash[1000000]; int main(){ // freopen("1078.txt","r",stdin); int n,i,sz,t; I("%d%d",&sz,&n); while(!isPrime(sz)) sz++; FF(i,n){ I("%d",&t); int p=t%sz; if(Hash[p]){ int step; for(step=1;step<sz;step++){ p=(t+step*step)%sz; if(!Hash[p]){ Hash[p]=1; O("%d",p); break; } } if(step>=sz) O("-"); }else{ O("%d",p); Hash[p]=1; } if(i!=n-1) O(" "); } return 0; }