博客
关于我
Excuses, Excuses! map的应用
阅读量:512 次
发布时间: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/

    你可能感兴趣的文章
    nginx反向代理、文件批量改名及统计ip访问量等精髓总结
    查看>>
    Nginx反向代理与正向代理配置
    查看>>
    Nginx反向代理及负载均衡实现过程部署
    查看>>
    Nginx反向代理是什么意思?如何配置Nginx反向代理?
    查看>>
    nginx反向代理解决跨域问题,使本地调试更方便
    查看>>
    Nginx反向代理配置
    查看>>
    Nginx启动SSL功能,并进行功能优化,你看这个就足够了
    查看>>
    nginx启动脚本
    查看>>
    Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
    查看>>
    Nginx在Windows下载安装启动与配置前后端请求代理
    查看>>
    Nginx多域名,多证书,多服务配置,实用版
    查看>>
    nginx如何实现图片防盗链
    查看>>
    Nginx学习总结(12)——Nginx各项配置总结
    查看>>
    Nginx学习总结(13)——Nginx 重要知识点回顾
    查看>>
    Nginx学习总结(14)——Nginx配置参数详细说明与整理
    查看>>
    nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
    查看>>
    Nginx安装SSL模块 nginx: the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx
    查看>>
    Nginx安装与常见命令
    查看>>
    Nginx安装及配置详解
    查看>>
    nginx安装配置
    查看>>