PTA 7-17 字符串关键字的散列映射
来源:互联网 发布:香港电视台直播软件 编辑:程序博客网 时间:2024/06/07 22:38
给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数(将关键字Key中的最后3个字符映射为整数,每个字符占5位;再用除留余数法将整数映射到长度为P的散列表中。例如将字符串AZDEG
插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25;再通过移位将其映射为3;然后根据表长得到,即是该字符串的散列映射位置。
发生冲突时请用平方探测法解决。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <string>#include <map>using namespace std;const int maxn = 1e6;bool vis[maxn];string s;int n, p;map<string, int> m;int main() { scanf("%d %d", &n, &p); memset(vis, false, sizeof(vis)); for (int i = 1; i <= n; i++) { cin >> s; int len = s.size(); int x = 0; if (len == 1) x = (s[0]-'A'); else if (len == 2) x = 32*(s[0]-'A')+(s[1]-'A'); else { for (int j = 3; j >= 1; j--) { int t = len - j; x = x * 32 + s[t] - 'A'; } } x = x % p; if (m[s] || !vis[x]) { m[s] = x; vis[x] = true; cout << x; } else { int y; for (int j = 1; j*j < maxn; j++) { y = (x+j*j) % p; if (!vis[y]) { vis[y] = true; m[s] = y; printf("%d", y); break; } y = (x-j*j+p) % p; if (!vis[y]) { vis[y] = true; m[s] = y; printf("%d", y); break; } } } if (i < n) cout << " "; else printf("\n"); } return 0;}
阅读全文
2 0
- PTA 7-17 字符串关键字的散列映射
- PTA 7-17(查找) 字符串关键字的散列映射(25 分) 25分代码
- PTA-数据结构 5-42 整型关键字的散列映射 (25分)
- 5-43 字符串关键字的散列映射
- 5-43 字符串关键字的散列映射 (25分)
- 5-43 字符串关键字的散列映射 (25分)
- 字符串关键字的散列映射(25 分)
- 《数据结构学习与实验指导》5-2:字符串关键字的散列映射
- 5-42 整型关键字的散列映射
- 5-42 整型关键字的散列映射 (25分)
- 4C的练习5-39 整型关键字的散列映射 <线性探测法>
- 《数据结构学习与实验指导》5-1:整数关键字的散列映射
- PTA 11-散列2 Hashing
- PTA—11-散列4 Hashing
- PTA 5-30 字符串的冒泡排序
- PTA 求解给定字符串的前缀
- PTA 列车厢调度
- PTA 7-5 字符串循环左移
- centos mysql apache php wordpress
- PTA 7-15 航空公司VIP客户查询
- osmdroid API解读(九)
- TLPI-Chapter 11系统限制和选项
- CSS盒模型详解
- PTA 7-17 字符串关键字的散列映射
- PTA 7-18 新浪微博热门话题
- 【LeetCode】Validate Binary Search Tree 验证二叉查找树
- Leetcode 题解系列(六)
- 在PHP中使用AES加密算法加密数据及解密数据
- 7-19 寻找大富翁
- java常见异常
- 动态创建AppDomain一
- JTAG(SWD)的参考电压