PAT (Advanced Level) Practice - 1145 Hashing - Average Search Time(25 分)

题目链接:点击打开链接

 

题目大意:略。

 

解题思路:平方探测法处理哈希表,但是该题只能正增长:with positive increments only。即,hi=(h(key)+i*i)%m (0 ≤ i ≤ m-1),注意:类似样例中“15”是插入不进的这种数,理论上应该是 [0,size-1] == size 次,但是这里还要额外 +1 次,因为这 1 次是出于 di==size 时的探测才知道是否进入循环了,所以该次也要算进去。

 

AC 代码

#include
#include

#define mem(a,b) memset(a,b,sizeof a)
#define ssclr(ss) ss.clear(), ss.str("")
#define INF 0x3f3f3f3f
#define MOD 1000000007

using namespace std;

typedef long long ll;

const int maxn=1e4+10;

int vis[maxn], times[maxn*10];

int isPrime(int x)
{
    if(x<2) return 0;
    for(int i=2;i<=sqrt(x);i++)
        if(x%i==0) return 0;
    return 1;
}

int main()
{
    int p,n,q,a;
    scanf("%d%d%d",&p,&n,&q);
    while(!isPrime(p)) p++;
    for(int i=0;i

 

你可能感兴趣的:(#,ACM,#,PTA,#,Hash)