其他分享
首页 > 其他分享> > PAT (Advanced Level) 1145 Hashing - Average Search Time

PAT (Advanced Level) 1145 Hashing - Average Search Time

作者:互联网

哈希,开放寻址法,平方探测法
插入和查找的过程是等价的,都是判断当前位置是否为空或者k是否超出Msize
#include<bits/stdc++.h>
using namespace std;

const int N = 1e4+10;

int Msize,n,m;
int h[N];

bool is_prime(int x){
    if(x==0 || x==1) return false;
    for(int i=2;i<=x/i;i++)
        if(x%i==0) return false;
    return true;
}

int find(int x,int &cnt){
    int sta=x%Msize,pos=sta;
    cnt=1;
    for(int k=0;k<Msize;k++,cnt++){
        int pos=(sta+k*k)%Msize;
        if(!h[pos] || h[pos]==x) return pos;
    }
    return -1;
}

int main(){
    cin>>Msize>>n>>m;
    while(!is_prime(Msize)) Msize++;
    for(int i=1;i<=n;i++){
        int a,cnt;
        cin>>a;
        int p=find(a,cnt);
        if(p==-1) printf("%d cannot be inserted.\n",a);
        else h[p]=a;
    }
    int res=0;
    for(int i=1;i<=m;i++){
        int a,cnt;
        cin>>a;
        find(a,cnt);
        res+=cnt;
    }
    printf("%.1f",(double)res/m);
    return 0;
}

标签:Search,PAT,1145,int,res,cnt,Msize,printf,find
来源: https://www.cnblogs.com/xhy666/p/16328002.html