P1381 单词背诵

题目描述

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

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

输入输出格式

输入格式:

第1行一个数\(n\),

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

接着是一个数\(m\),

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

输出格式:

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


首先看懂题,要先把出现的所有单词都背了才能再找最小连续。

所以第一目的是先做匹配找到有多少单词出现了。

有\(hash\),\(map\)几种方法。不过我比较毒瘤,写了字典树匹配。

存下\(f[i]\)数组表示文章第\(i\)个单词是字典中的第几个单词。

第二步就是我也说不清楚的一个思想了,可能有单调队列的影子。

我们先固定左端点l,扫描右端点直到包含所有出现的单词至少一次。

用桶存下每个单词出现次数,然后边移动右端点边尝试移动左端点(如果加入右端点后出现次数大于1即可移动左端点)

我犯的智障错误:

  1. 字典树居然减了'0',真是绝了。。。
  2. 统计时不小心把0给统计了。。。

code:

#include <cstdio>
#include <cstring>
int min(int x,int y) {return x<y?x:y;}
const int N=1010;
const int M=100010;
const int inf=0x3f3f3f3f;
struct node
{
int son[26],cnt;
}t[N*10];
char word[12];
int cnt=0,n,m,f[M];
void build(int j)
{
scanf("%s",word);
int now=0,len=strlen(word);
for(int i=0;i<len;i++)
{
int k=word[i]-'a';
if(t[now].son[k])
now=t[now].son[k];
else
{
t[now].son[k]=++cnt;
now=cnt;
}
}
t[now].cnt=j;
}
void check(int j)
{
scanf("%s",word);
int len=strlen(word),now=0;
for(int i=0;i<len;i++)
{
int k=word[i]-'a';
if(t[now].son[k])
now=t[now].son[k];
else
return;
}
f[j]=t[now].cnt;
}
int cnt0[N],used[N],l,a,b=inf,a0=0;//要背长度,最短连续段长度
void DP()
{
used[0]=1;
for(int i=1;i<=m;i++)
{
if(!used[f[i]])
{
a0++;
used[f[i]]=1;
}
}
printf("%d\n",a0);
if(a0==0) {printf("0\n");return;}
l=1;
memset(used,0,sizeof(used));
used[0]=1;
for(int i=1;i<=m;i++)
{
cnt0[f[i]]++;
while(cnt0[f[l]]>1)
{
cnt0[f[l]]--;
l++;
}
if(!used[f[i]])
{
a++;
used[f[i]]=1;
}
if(a==a0)
b=min(i+1-l,b);
}
printf("%d\n",b);
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
build(i);
scanf("%d",&m);
for(int i=1;i<=m;i++)
check(i);
DP();
return 0;
}

2018.6.3

洛谷 P1381 单词背诵 解题报告的更多相关文章

  1. 洛谷 P1381 单词背诵

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

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

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

  3. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  4. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  5. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  6. 洛谷 P4175 [CTSC2008]网络管理 解题报告

    P4175 [CTSC2008]网络管理 题目描述 带修改树上链的第\(k\)大 输入输出格式 输入格式: 第一行为两个整数\(N\)和\(Q\),分别表示路由器总数和询问的总数. 第二行有\(N\) ...

  7. 洛谷 P2444 [POI2000]病毒 解题报告

    P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已 ...

  8. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  9. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

随机推荐

  1. 阿里云centos内docker的搭建

    由于docker在17之后的版本分成了docker EE(企业版)和docker CE(社区版),那么我们在安装的时候就要开始纠结的选择了,这里我推荐了docker CE(社区版). 实际上这两个版本 ...

  2. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)

    文章目录 前情概要 路由.action的扫描.发现.注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取.同样的一行代码我们不厌其烦的重复写了无数次.遂 ...

  3. UVA - 116 Unidirectional TSP 多段图的最短路 dp

    题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...

  4. M2postmortem

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 答:我们的软件主要解决信息提取的问题.定义清晰:要提取的内容包括于计算机科学相关内容的标题.作者. ...

  5. 毕业设计 之 五 PHP语法学习笔记

    毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...

  6. <<架构漫谈>>读后感

    今天按照老师的要求,看了架构漫谈1--9讲,觉得受益良多,以下是我得点点读后感: (一)什么是架构? 架构的英文是Architecture,从定义上看,架构好像是一个过程,也不是很清晰.下面从架构的缘 ...

  7. vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法

    vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...

  8. Vim列模式(块选择)输入

    https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ https://www.zhihu.com/question/19968224 ...

  9. MYSQL ROW_FORMAT=Compact

    https://dev.mysql.com/doc/refman/5.6/en/innodb-row-format-antelope.html https://docs.oracle.com/cd/E ...

  10. Activiti解析.bpmn文件获得User Task节点的CandidateUsers特性的值

    参考文档: http://www.cnblogs.com/mingforyou/p/5351332.html http://blog.csdn.net/jackyrongvip/article/det ...