1078 Hashing
阿新 • • 發佈:2018-08-28
clu 元素 true arc clas sea std code amp
題意:給出表長和待插入的元素,求每個元素的插入位置,散列函數為H(key)=key%TSize,解決沖突利用平方探測法(只考慮正向偏移)。
思路:同1145 Hashing - Average Search Time
代碼:
#include <cstdio> #include <cmath> #include <unordered_map> using namespace std; bool isPrime(int n) { if(n<=1) return false; int sqr=(int)sqrt(n); for(inti=2;i<=sqr;i++) if(n%i==0) return false; return true; } int main() { int MSize,n,key; scanf("%d%d",&MSize,&n); while(!isPrime(MSize)) MSize++; bool exist[10005]={false};//exist[i]為true表示位置i已經被占據了 int data[10005]; unordered_map<int,int> pos;//pos[val]存放val的位置for(int i=0;i<n;i++){ scanf("%d",&key); data[i]=key; int d=0; for(;d<MSize;d++){ int p=(key+d*d)%MSize; if(exist[p]==false){ exist[p]=true; pos[key]=p; break; } }if(d==MSize) pos[key]=-1; } for(int i=0;i<n;i++){ if(pos[data[i]]==-1) printf("-"); else printf("%d",pos[data[i]]); if(i<n-1) printf(" "); } return 0; }
1078 Hashing