1. 程式人生 > >1078 Hashing

1078 Hashing

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(int
i=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