当前位置: 首页 > article >正文

PAT甲级-1145 Average Search Time

题目

题目大意

题目要求哈希表的大小必须是大于s的素数,给出需要插入的数量n以及需要查找的数目m。要求按照题目给出的哈希函数构造哈希表,使用二次探测法解决冲突。如果某个元素不能插入,按规定格式输出。最后计算平均查找步长。

思路

典型的哈希表数据结构,用平方探测法构建哈希表,并用该哈希表查找元素,计算平均查找次数,根据题目模拟即可。

代码

#include <iostream>
#include <vector>
using namespace std;

bool isPrime(int n){
    for (int i = 2; i < n; i++){
        if (n % i == 0){
            return false;
        }
    }
    return true;
}

int main(){
    int s, n, m;
    cin >> s >> n >> m;
    while (!isPrime(s)){
        s++;
    }  // s必须是素数
    vector<int> v(s, 0);  // 哈希表
    for (int i = 0; i < n; i++){
        int a;
        cin >> a;
        int flag = 0;  // 是否可以插入表
        for (int j = 0; j < s; j++){  // 插入最多探测 s 次
            if (v[(a + j * j) % s] == 0){
                flag = 1;
                v[(a + j * j) % s] = a;
                break;
            }
        }
        if (flag == 0){
            cout << a << " cannot be inserted." << endl;
        }
    }  // 平方探测法构建哈希表

    int sum = 0;  // 总查找次数
    for (int i = 0; i < m; i++){
        int q;
        cin >> q;
        for (int j = 0; j <= s; j++){  // 查找最多探测 s+1 次
            sum++;
            if (v[(q + j * j) % s] == q || v[(q + j * j) % s] == 0){  // 等于0说明该元素不存在,可以停止查找
                break;
            }
        }
    }
    printf("%.1lf\n", sum * 1.0 / m);

    return 0;
}


http://www.kler.cn/a/411172.html

相关文章:

  • sunshine和moonlight串流网络丢失帧高的问题(局域网)
  • 【代码pycharm】动手学深度学习v2-08 线性回归 + 基础优化算法
  • 项目缓存之Caffeine咖啡因
  • Windows系统运行库软件游戏修复工具
  • 【FPGA开发】Vivado自定义封装IP核,绑定总线
  • HarmonyOs鸿蒙开发实战(20)=>一文学会基础使用组件导航Navigation
  • C# 结构体
  • C#基础练习61-65
  • MMCM DRP动态配置方法(超详细讲解)
  • Spring Boot 3.4 正式发布,结构化日志!
  • 【Redis篇】String类型命令详讲以及它的使用场景
  • 互联网直播/点播EasyDSS视频推拉流平台视频点播有哪些技术特点?
  • 实战项目负载均衡式在线 OJ
  • Notepad++ 替换所有数字给数字加单引号
  • VITE+VUE3+TS环境搭建
  • TortoiseGit 将本地已有仓库推送到远程
  • 【RAG多模态】再看多模态RAG进行文档问答的方案
  • k8s rainbond centos7/win10 -20241124
  • java:拆箱和装箱,缓存池概念简单介绍
  • 基于springboot的HttpClient、OKhttp、RestTemplate对比
  • intellij idea控制台 visual stadio dev c++ keil pycharm python 输出乱码解决方案最终版 java
  • Springboot自带注解@Scheduled实现定时任务
  • 自动泊车“哐哐撞大墙”,小米SU7智驾功能bug缠身?
  • 组合模式详解及Java实现
  • 【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项
  • HTML 常用标签属性汇总一〈body〉标签