博客
关于我
Excuses, Excuses! map的应用
阅读量:502 次
发布时间:2019-03-07

本文共 2068 字,大约阅读时间需要 6 分钟。

为了解决法官伊藤的问题,我们需要编写一个程序来识别包含关键词的借口,并找出最糟糕的借口。以下是详细的解决方案:

方法思路

  • 读取输入数据:首先读取每个数据集的关键词和借口。每个数据集的第一行给出关键词数量K和借口数量E。
  • 存储关键词:将关键词存储到一个集合中,以便快速查找。
  • 处理借口:对于每个借口,检查它是否包含任何关键词。关键词是连续且被非字母或空格分隔开的。
  • 计算关键词出现次数:对于每个借口,计算其中关键词的总出现次数。
  • 找出最糟糕的借口:比较所有借口的关键词出现次数,找出最多的。若有多个,输出所有。
  • 输出结果:输出每个数据集的结果,包括编号和最糟糕的借口。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;int main() { map
    keywordMap; vector
    excuses; int k, e, setNumber = 1; char currentKeyword[100]; while (true) { // Read each set of data if (scanf("%d %d", &k, &e) == EOF) break; vector
    keywords; for (int i = 0; i < k; ++i) { string kw; scanf("%s", &kw); keywords.push_back(kw); } vector
    excuseList; for (int i = 0; i < e; ++i) { string exc; scanf("%s", &exc); excuseList.push_back(exc); } // Prepare keyword list for checking set
    keywordsSet; for (const auto& kw : keywords) { keywordsSet.insert(kw); } // For each excuse, count the number of keywords vector
    counts; for (const auto& exc : excuseList) { string lowerExc; for (char c : exc) { lowerExc += tolower(c); } int count = 0; for (int i = 0; i <= lowerExc.size() - 1; ++i) { // Check each possible substring of length 1 to 20 for (int l = 1; l <= 20; ++l) { if (i + l > lowerExc.size()) break; string sub = lowerExc.substr(i, l); if (keywordsSet.count(sub)) { count++; } } } counts.push_back(count); } // Find the maximum count int maxCount = *max_element(counts.begin(), counts.end()); // Collect all excuses with maxCount vector
    worstExcuses; for (int i = 0; i < counts.size(); ++i) { if (counts[i] == maxCount) { worstExcuses.push_back(excuseList[i]); } } // Output the result cout << "Excuse Set #" << setNumber << endl; for (const auto& we : worstExcuses) { cout << we << endl; } cout << endl; setNumber++; } return 0;}

    代码解释

  • 读取输入: 使用scanf函数读取输入数据,首先读取K和E,然后读取K个关键词和E个借口。
  • 存储关键词: 将关键词存储在map中,确保快速查找。
  • 处理借口: 将每个借口转换为小写,检查其中是否包含任何关键词。遍历所有可能的子字符串长度,检查是否存在于关键词集合中。
  • 计算出现次数: 对于每个借口,计算关键词出现的总次数。
  • 找出最糟糕的借口: 比较所有借口的出现次数,找出最多的,并收集所有具有相同最大次数的借口。
  • 输出结果: 输出每个数据集的结果,包括编号和最糟糕的借口,每个借口占一行,最后用空行分隔。
  • 转载地址:http://aihjz.baihongyu.com/

    你可能感兴趣的文章
    js实现链表
    查看>>
    ArchLinux安装的各种问题(找不到磁盘、闪屏、键盘失效、声卡、网络、时间不同步)
    查看>>
    map[]和map.at()取值之间的区别
    查看>>
    成功解决升级virtualenv报错问题
    查看>>
    Jenkins打包之本地远程自动打包教程
    查看>>
    【SQLI-Lab】靶场搭建
    查看>>
    linux环境下nginx安装
    查看>>
    Xception 设计进化
    查看>>
    抗DDOS攻击
    查看>>
    "getchar();"的作用
    查看>>
    Vue实现文本框自动获取焦点
    查看>>
    请你谈谈Redis主从复制的理解?
    查看>>
    【ES6(2015)】RegExp
    查看>>
    浅谈持续集成(CI)、持续交付(CD)、持续部署(CD)
    查看>>
    HDU4814——数学,模拟进制转换
    查看>>
    一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...)
    查看>>
    JavaScript中如何给按钮设置隐藏与显示属性
    查看>>
    Python——5函数
    查看>>
    C++扬帆远航——1
    查看>>
    上周热点回顾(5.3-5.9)
    查看>>