博客
关于我
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/

    你可能感兴趣的文章
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0072---Protobuf内容小结
    查看>>
    Netty工作笔记0074---handler链调用机制实例1
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0081---编解码器和处理器链梳理
    查看>>
    Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测
    查看>>
    Netty心跳检测机制
    查看>>
    netty既做服务端又做客户端_网易新闻客户端广告怎么做
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—1.服务端启动流程一
    查看>>