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
英文地址,請注明出處:http://en.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;數據分片的原…