PTA 11-散列2 Hashing

来源:互联网 发布:长阳淘宝客服 编辑:程序博客网 时间:2024/05/21 17:58
http://pta.patest.cn/pta/test/18/exam/4/question/641
#include<vector>#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cctype>#include<cmath>#include<cstdlib>#include<queue>#include<map>using namespace std;#define MAXSIZE 50001#define MAXTABLESIZE 50000int Size=0;int NextPrime(int N){    if(N==1||N==0)        return  2;  if(N==2||N==3)    return N;  //²âÊÔ¶þ    int i,p=(N%2)?N:N+1;    while(p<=MAXTABLESIZE)    {        for(i=(int)sqrt(p);i>2;i--)            if(!(p%i)) break;        if(i==2) break;        else p+=2;    }    return p;}int Hash(int key,int p){    return key%p;}void Insert(int h[],int key,int n){    int m,p=Hash(key,n);    m=p;    int s=n;    int t=0;    if(h[p])    {         t=0 ;            for(t=1;t<n;t++)            {               p=(m+t*t)%n;                if(h[p]==0)                        break;        }    }    if(t<s)     {         if(Size==0)         printf("%d",p);         else            printf(" %d",p);         h[p]=key;     Size++;     }     else     {         if(Size==0)         printf("-");         else            printf(" -");     }}int main(){   int n,i,t,m;    int key;int h[MAXSIZE];int a[MAXSIZE];int p[MAXSIZE];   scanf("%d%d",&n,&m);   n=NextPrime(n);    for(i=0;i<n;i++)        h[i]=0;   for(i=0;i<m;i++)       scanf("%d",&a[i]);    for(i=0;i<m;i++)    Insert(h,a[i],n);printf("\n");    return 0;}

0 0