【1145】Hashing - Average Search Time (25分)【hash 平方探测法】

简介: 【1145】Hashing - Average Search Time (25分)【hash 平方探测法】【1145】Hashing - Average Search Time (25分)【hash 平方探测法】
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
//插入时pos = (a + j * j) % tsize,j是从0~tsize-1的数字
//查询时pos = (a + j * j) % tsize,其中j <= tsize
bool isprime(int n){//判断是否是素数
  for(int i=2;i*i<=n;i++){
    if(n%i==0)  return false;
  }
  return true;
}
int main(){   
    int tsize,n,m,a;//表长,要插入个数,查询个数
    scanf("%d %d %d",&tsize,&n,&m);
    while(!isprime(tsize))  tsize++;//大于表长的最大素数
    vector<int>v(tsize);
    for(int i=0;i<n;i++){
      scanf("%d",&a);
      int flag=0;
      for(int j=0;j<tsize;j++){
        int pos=(a+j*j)%tsize;
        if(v[pos]==0){
          v[pos]=a;
          flag=1;
          break;
        }
      }
      if(!flag) printf("%d cannot be inserted.\n",a);
    }
    int ans=0;
    for(int i=0;i<m;i++){
      scanf("%d",&a);
      for(int j=0;j<=tsize;j++){
        ans++;
        int pos=(a+j*j)%tsize;
        if(v[pos]==a||v[pos]==0) break;
        //找到或者没找到(不存在)都退出
      }
    }
    printf("%.1lf\n",ans*1.0/m);
    system("pause");
    return 0;
}
相关文章
|
C++
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
85 0
PAT (Advanced Level) Practice - 1145 Hashing - Average Search Time(25 分)
PAT (Advanced Level) Practice - 1145 Hashing - Average Search Time(25 分)
122 0
【1063】Set Similarity (25 分)
【1063】Set Similarity (25 分) 【1063】Set Similarity (25 分)
103 0
【1060】Are They Equal (25分)
【1060】Are They Equal (25分) 【1060】Are They Equal (25分)
97 0
|
索引
LeetCode 599: 两个列表的最小索引总和 Minimum Index Sum of Two Lists
题目: 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。
892 0
|
算法 JavaScript Java
并查集算法 - Algorithms, Part I, week 1 UNION-FIND
cousera 普林斯顿大学 算法公开课 第一周 并查集数据类型内容整理
1524 0
1104. Sum of Number Segments (20) consecutive subsequence 每个数出现的次数
Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence.
973 0