户外-10.1梅里邀请

10.1梅里内转,邀约,请到www.buyiyo.com报名

费用纯AA,预计1500左右

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用c++和BKDRHash方法解决下述问题:描述 Akko正在Luna Nova Magic Academy学习魔法。据说魔法世界中有10^5种不同的诅咒。阿卡很难记住所有这些。幸运的是,梅里迪斯教授说她可以帮助阿卡制作一本诅咒词典。当Akko听到诅咒时,字典会告诉她诅咒的效果。此外,当Akko想做某事时,字典会为她找到诅咒。如果没有这样的诅咒,字典将是沉默的。你能写一个程序来重现诅咒词典吗?输入 每个测试用例将包含不超过 10^5 个诅咒。每个诅咒都会像“[名称]效应”。诅咒的名称和效果将只包含小写字母。“]”和它后面的字符串之间只有一个空格。名称长度不超过20,效果长度不超过80。字典的末尾是一行“END”。在所有诅咒之后,将有一个整数 N (1<=N<1000),后跟 N 个查询。每个查询都将是一个“[诅咒名称]”或“诅咒效果”。每个输入文件中只有一个测试用例。输出 对于每个测试用例,您必须按其名称输出诅咒的效果或按其效果输出诅咒的名称。如果没有满足条件的诅咒,请打印“沉默”。提示 哈希字符串 gets() 在 C++14 中被弃用,改用 getline。对于 char arr[],请使用 cin.getline(arr,sizeof(arr));对于字符串 arr,请使用 getline(cin, arr);BKDRHash方法:unsigned int BKDRHash(char* str) { unsigned int seed = 31, key = 0; // 31 131 1313 13131 131313 etc.. while(*str) key = key * seed + (*str++); return key & 0x7fffffff; // return a 31-bit value }
06-07
好的,根据您的要求,我会使用 C++ 和 BKDRHash 方法来实现该程序。以下是代码实现: ```c++ #include <iostream> #include <string> #include <unordered_map> using namespace std; unsigned int BKDRHash(char* str) { unsigned int seed = 31, key = 0; while (*str) key = key * seed + (*str++); return key & 0x7fffffff; } int main() { unordered_map<unsigned int, string> dict; string curse; getline(cin, curse); while (curse != "END") { string name = curse.substr(1, curse.find("]") - 1); string effect = curse.substr(curse.find("]") + 2); dict[BKDRHash(name.c_str())] = effect; getline(cin, curse); } int n; cin >> n; getchar(); // 读取上一个输入流中的换行符 while (n--) { getline(cin, curse); if (curse[0] == '[') { unsigned int key = BKDRHash(curse.substr(1, curse.size() - 2).c_str()); if (dict.find(key) != dict.end()) cout << dict[key] << endl; else cout << "沉默" << endl; } else { bool found = false; for (auto& p : dict) { if (p.second == curse) { cout << "[" << p.first << "] " << curse << endl; found = true; } } if (!found) cout << "沉默" << endl; } } return 0; } ``` 该程序使用了 `unordered_map` 来实现哈希表,使用 BKDRHash 方法作为哈希函数。在读入每个诅咒时,将诅咒名称的哈希值作为键,诅咒效果作为值,存入哈希表中。在读入每个查询时,如果查询是以 `[` 开头的字符串,则将查询名称的哈希值作为键查找哈希表,输出对应的诅咒效果;如果查询是以其他字符串开头的字符串,则遍历哈希表查找对应的诅咒名称,输出对应的诅咒名称和诅咒效果。如果没有对应的诅咒,输出“沉默”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值