单词背诵

题目描述

灵梦有 \(n\) 个单词想要背,但她想通过一篇文章中的一段来记住这些单词。

文章由 \(m\) 个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个)。并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了。

输入格式

第 \(1\) 行一个数 \(n\),接下来 \(n\) 行每行是一个长度不超过 \(10\) 的字符串,表示一个要背的单词。

接着是一个数 \(m\),然后是 \(m\) 行长度不超过 \(10\) 的字符串,每个表示文章中的一个单词。

输出格式

输出文件共 \(2\) 行。第 \(1\) 行为文章中最多包含的要背的单词数,第 \(2\) 行表示在文章中包含最多要背单词的最短的连续段的长度。

样例 #1

样例输入 #1

3
hot
dog
milk
5
hot
dog
dog
milk
hot

样例输出 #1

3
3

提示

数据规模与约定

  • 对于 \(30\%\) 的数据,\(n \le 50\),\(m \le 500\);
  • 对于 \(60\%\) 的数据,\(n \le 300\),\(m \le 5000\);
  • 对于 \(100\%\) 的数据,\(n \le 1000\),\(m \le 10^5\)。

代码:

#include<iostream>
#include<map>
using namespace std;
string s[100005], s1;
int n, m;
map<string, bool> word;
map<string, int> cnt;
int sum, len;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s1; word[s1] = 1;
}
//输入s数组
cin >> m;
for (int i = 1; i <= m; i++) cin >> s[i]; //使用双指针进行遍历
for (int i = 1, j = 1; j <= m; j++) {
if (word[s[j]]) cnt[s[j]]++;
if (cnt[s[j]] == 1) sum++, len = j - i + 1;
while (i <= j) {
if (cnt[s[i]] == 1) break;
if (cnt[s[i]] > 1) cnt[s[i]]--, i++;
if (!word[s[i]]) i++;
}
len = min(len, j - i + 1);
}
cout << sum << endl << len << endl;
return 0;
}

洛谷P1381单词背诵的更多相关文章

  1. 洛谷 P1381 单词背诵

    洛谷 P1381 单词背诵 洛谷传送门 题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的 ...

  2. 洛谷 P1381 单词背诵 解题报告

    P1381 单词背诵 题目描述 灵梦有\(n\)个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由\(m\)个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只 ...

  3. 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取

    https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ...

  4. 洛谷 P1101 单词方阵

    题目链接 https://www.luogu.org/problemnew/show/P1101 题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中 ...

  5. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

    洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...

  6. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  7. 洛谷——P1101 单词方阵

    https://www.luogu.org/problem/show?pid=1101#sub 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放 ...

  8. 洛谷P1101 单词方阵——S.B.S.

    题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...

  9. 洛谷P1808 单词分类

    题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等. 例如“AABA ...

  10. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...

随机推荐

  1. 灵巧手 —— 智能仿生手 —— 人形机器人(humanoid)

    产品主页: https://www.brainco.cn/#/product/brain-robotics 国内销售的一款产品,美国华人生产的,灵巧度非常高的一款仿生手产品.

  2. 推荐一款界面优雅、功能强大的 .NET + Vue 权限管理系统

    前言 今天推荐一款用 .NET 和 Vue3 实现的开源权限管理系统.它的界面清爽干净,功能强大,还具备灵活的角色权限分配功能,能够满足不同规模企业的管理需求.无论你是开发新手还是大神,都能轻松上手, ...

  3. 飞书Webhook触发操作指南,实现事件驱动型工作流自动化

    本文提供了利用数据触发Feishu Webhook的具体操作指南,包括Webhook的设置以及编写触发代码的方法,为读者提供了实践参考,希望能帮助解决你目前遇到的问题. 描述 用于使用数据触发 Fei ...

  4. MySQL 5.7 DDL 与 GH-OST 对比分析

    作者:来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率.空间占用.锁阻塞.binlog日志产生量.主备延时等方面 ...

  5. Pintia 天梯地图 dijkstra进阶

    7-14 天梯地图 - SMU 2024 spring 天梯赛3(补题) (pintia.cn) dijkstra进阶做法,包含路径记录,以及按权重统计路径条件等; 不过最开始我一直将优先队列开的最大 ...

  6. 如何切换git的HEAD分支

    git remote set-head origin some_branch  

  7. 最短路之Dijkstra

    Dijkstra算法: Dijkstra是一种求解 非负权图 上单源最短路径的算法. 思路:将所有结点分为两个集合:已经确定最短路径的点(S)和未确定最短路长度的点集(T),开始时所有点都属于T 初始 ...

  8. C#ListView类的继承

    ListView控件类新加方法 新建一个类myListView class myListView : System.Windows.Forms.ListView { //添加自定义的方法 -- //设 ...

  9. 动物园 (APIO 2007) 状压DP

    动物园 \([APIO \ 2007]\) · 题意: 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物.如下图所示: 你是动物园的公关主管. ...

  10. 使用 setResponseStatus 函数设置响应状态码

    title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通 ...