PTA 天梯赛 7-43:字符串关键字的散列映射

【题目来源】
https://pintia.cn/problem-sets/15/exam/problems/type/7?problemSetProblemId=890

【题目描述】
给定一系列由大写英文字母组成的字符串关键字和素数 P,用移位法定义的散列函数 H(Key) 将关键字 Key 中的最后 3 个字符映射为整数,每个字符占 5 位;再用
除留余数法将整数映射到长度为 P 的散列表中。例如将字符串 AZDEG 插入长度为 1009 的散列表中,我们首先将 26 个大写英文字母顺序映射到整数 0~25;再通过移位将其映射为 3×32^2+4×32+6=3206;然后根据表长得到3206%1009=179,即是该字符串的散列映射位置。
发生冲突时请用
平方探测法解决。

【输入格式】
输入第一行首先给出两个正整数 N(≤500)和 P(≥2N 的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出 N 个字符串关键字,每个长度不超过 8 位,其间以空格分隔。

【输出格式】
在一行内输出每个字符串关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。

【输入样例1】
4 11
HELLO ANNK ZOE LOLI

【输出样例1】
3 10 4 0

【输入样例2】
6 11
LLO ANNA NNK ZOJ INNK AAA

【输出样例2】
3 0 10 9 6 1

【算法分析】
** memset‌ 函数仅适用于填充 0、-1 或特定字节模式(如 0x3f3f3f3f),其他值可能导致意外结果(如填充 1 会得到 0x01010101 而非 1);fill‌ 函数支持任意类型的赋值(如 int、float、自定义类等),值无限制。

** 数组模拟单链表
用数组模拟单链表的代码详见:
https://blog.csdn.net/hnjzsyjyj/article/details/132185463

** 数组模拟散列表
用数组模拟散列表的代码详见:
https://blog.csdn.net/hnjzsyjyj/article/details/132179868

** 拉链法处理冲突
若数据的个数为 n,则拉链法的模 p 取大于 n 的最小素数时,处理冲突效果最好。例如,若 n=7,则 p 最好取 11 等素数。 
求大于给定数的最小素数的代码详见:
https://blog.csdn.net/hnjzsyjyj/article/details/132182788
拉链法常见的实现需要用数组模拟单链表实现。用数组模拟单链表的代码详见:
https://blog.csdn.net/hnjzsyjyj/article/details/132185463

** 开放寻址法处理冲突
若数据的个数为 n,则开放寻址法的数组空间一般开到 2n~3n,且模 p 取大于 n 的最小素数时,处理冲突效果最好。
求大于给定数的最小素数的代码详见:
https://blog.csdn.net/hnjzsyjyj/article/details/132182788

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int maxn=2e3+5;
vector<string> v(maxn);
bool st[maxn];
int n,p;int getHashVal(string str) {int t=0;int len=str.size();for(int i=max(0,len-3); i<len; i++) {t=t*32+str[i]-'A';}return t;
}int main() {cin>>n>>p;for(int i=0; i<n; i++) {string s;cin>>s;int t=-1;for(int j=0; j<p; j++) {if(v[j]==s) t=j;}if(t!=-1) {if(i!=0) cout<<" ";cout<<t;continue;}int val=getHashVal(s);int idx=val%p;int flag=0, x=0;while(st[idx]) {idx=val%p;if(!flag) {idx=(idx+x*x)%p;flag=1;} else {idx=idx-x*x;if(idx<0) idx+=p;idx=idx%p;flag=0;x++;}}v[idx]=s;st[idx]=1;if(i!=0) cout<<" ";cout<<idx;}return 0;
}/*
in:
4 11
HELLO ANNK ZOE LOLIout:
3 10 4 0
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/151638888
https://github.com/root83cn/PAT/
https://blog.csdn.net/hnjzsyjyj/article/details/132179868
https://www.acwing.com/file_system/file/content/whole/index/content/9033086/
https://blog.csdn.net/Jay_fearless/article/details/114639337


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96857.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python核心技术开发指南(065)——with语句

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl with语句定义 with语句是Python中用于简化资源管理的语法结构,通过上下文管理器(实现__enter__()和__exit__()方法的对象)确保资源在使用完毕后被正确释放,无论代码块是否发生异常。其核心作…

从基础到高级:一文快速认识MySQL UPDATE 语句

在数据库日常运维与开发中&#xff0c;数据更新是与数据查询同等重要的核心操作。MySQL 的 UPDATE 语句凭借其灵活的语法结构和强大的功能&#xff0c;能够满足从简单字段修改到复杂关联表更新的各类需求。然而&#xff0c;若使用不当&#xff0c;不仅可能导致数据一致性问题&a…

材料基因组计划(MGI)入门:高通量计算与数据管理最佳实践

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 摘要 材料基因组计划&#xff08;Materials Genome Ini…

Vision Transformer (ViT) :Transformer在computer vision领域的应用(一)

在图像领域,CNN卷积神经网络结构已经成为了标配,所有的模型都是基于CNN来构造的。 而在NLP领域,自从Transformer横空出世之后,基本上也统治了NLP的各个领域。 基于Transformer的强大,一些论文的工作都是将Transformer也应用到CV领域,在这篇论文:AN IMAGE IS WORTH 16X1…

自动驾驶中的传感器技术45——Radar(6)

本文详细介绍4D雷达相关解决方案&#xff0c;4D雷达关键词&#xff1a;4D Imaging Radar 1、4D雷达特点 图1 4D雷达 vs 3D雷达图2 4D雷达虚拟通道数量不断增加图3 4D雷达 vs 3D雷达 vs 摄像头和激光雷达图4 毫米波雷达在不同驾驶等级下的应用需求Ref&#xff1a;https://pdf.d…

浏览器调试工具详解

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

代码审计-PHP专题原生开发SQL注入1day分析构造正则搜索语句执行监控功能定位

挖掘技巧&#xff1a; -语句监控-数据库SQL监控排查可利用语句定向分析 -功能追踪-功能点文件SQL执行代码函数调用链追踪 -正则搜索-(update|select|insert|delete|).*?where.* 如何快速的在多个文件代码里面找脆弱&#xff1a; 1、看文件路径 2、看代码里面的变量&#…

Linux中:调试器gdb/cgdb的使用

引言在追寻光的路上不断前行&#xff0c;详细介绍Linux下gdb/cgdb的使用。一、准备• 程序的发布方式有两种&#xff0c;默认是 debug 模式和 release 模式。Linux gcc/g编译出来的二进制程序默认是release模式• 要使用gdb调试&#xff0c;必须在源代码生成⼆进制程序的时候加…

【算法】【链表】148.排序链表--通俗讲解

算法通俗讲解推荐阅读 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链表…

计算机组成原理:存储系统概述

&#x1f4cc;目录&#x1f4be; 存储系统概述&#xff1a;计算机的“记忆中枢”&#x1f3d7;️ 一、存储系统的层次结构&#xff1a;速度与容量的“黄金平衡”&#xff08;一&#xff09;经典存储层次金字塔&#xff08;二&#xff09;层次结构的设计原则&#xff08;三&…

基于CNN/CRNN的汉字手写体识别:从图像到文字的智能解码

在人工智能浪潮的推动下&#xff0c; handwriting recognition&#xff08;手写识别&#xff09;技术已成为连接传统书写与数字世界的重要桥梁。其中&#xff0c;汉字手写体识别因其字符集的庞大和结构的复杂性&#xff0c;被视为模式识别领域最具挑战性的任务之一。近年来&…

【无人机】无人机用户体验测试策略详细介绍

一、 道&#xff1a;核心测试理念与目标核心理念&#xff1a; 用户体验测试的核心不是寻找功能Bug&#xff0c;而是评估用户在与无人机系统&#xff08;包括飞行器、遥控器、APP&#xff09;交互全过程中的主观感受、操作效率、情感变化和达成目标的难易度。我们的目标是让科技…

@RequiredArgsConstructor使用

spring推荐通过构造方法进行注入&#xff0c;如果需要注入的成员变量较多&#xff0c;手动创建构造方法可能需要频繁修改&#xff0c;这时&#xff0c;可以使用RequiredArgsConstructor。RequiredArgsConstructor是lombok中提供的注解&#xff0c;可以为类中final或者NotNull修…

TA-VLA——将关节力矩反馈融入VLA中:无需外部力传感器,即可完成汽车充电器插入(且可多次自主尝试)

前言 今25年9.13日&#xff0c;我在微博上写道&#xff1a; “我们为何24年起聚焦具身开发呢 23年我们做了一系列大模型应用&#xff0c;发觉卷飞了&#xff0c;c端搞不过大厂的工程迭代 流量获取&#xff0c;b端拼不过大厂的品牌&#xff0c;且大厂外 人人都可以搞 ​然&…

数据驱动破局商业信息不对称:中国商业查询平台的技术实践与方法论心得

前言 在当前中国经济高质量发展的浪潮中,企业数量已突破5000万户(截至2024年数据,延续2021年超5亿用户查询需求的增长趋势),但“企业质量参差、信息不透明”的痛点始终困扰着市场主体——企业合作前怕踩坑、个人求职担心“皮包公司”、投资者规避坏账风险,这些需求的核心…

光谱相机的图像模式

光谱相机通过不同的成像方式获取目标的光谱信息&#xff0c;主要分为以下几种图像模式&#xff1a;一、按成像方式分类‌点扫描模式&#xff08;Whiskbroom&#xff09;‌工作原理&#xff1a;逐点扫描目标区域&#xff0c;每个点获取完整光谱曲线特点&#xff1a;光谱分辨率最…

连接器上的pin针和胶芯如何快速组装?

在连接器生产过程中&#xff0c;pin 针与胶芯的组装是核心环节 —— 人工组装不仅效率低&#xff08;单组耗时约 15-20 秒&#xff09;&#xff0c;还易因对齐偏差导致 pin 针弯曲、胶芯卡滞&#xff0c;不良率高达 3%-5%。针对这一问题&#xff0c;可通过 “机器精准排列 定制…

Zynq-7000与Zynq-MPSoC 的 AXI 接口对比

Zynq 与 Zynq UltraScale MPSoC 的的 AXI 接口对比 1. 总体架构差异Zynq-7000 双核 ARM Cortex-A9 (PS) 7 系列 FPGA (PL)PS–PL 之间主要通过 AXI 总线通讯提供 GP (General Purpose)、HP (High Performance)、ACP (Accelerator Coherency Port) 等接口ZynqMP (UltraScale MP…

关键字 - 第六讲

前文补充#include <iostream> using namespace std;int main() {int a 10;int c 20; // 将变量c定义在switch语句之前switch(a){case 1:{cout << ".........." << endl;cout << c << endl;}break;default:cout << ".....…

Linux相关概念和易错知识点(43)(数据链路层、ARP、以太网、交换机)

目录1.从网络层到数据链路层&#xff08;1&#xff09;MAC地址&#xff08;2&#xff09;IP地址和MAC地址的区别&#xff08;3&#xff09;ARP&#xff08;4&#xff09;不同层之间的关系2.以太网&#xff08;1&#xff09;以太网的帧格式&#xff08;2&#xff09;数据分片的原…