https://www.luogu.org/problemnew/show/P1381

字符串匹配,用哈希总没有错的。

然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长。

一开始先找到第一个要的词汇。这个不多说。

然后每次往后面长,遇到非法词汇就继续长。

遇到合法的,就把头部所有合法的重复词和非法词都取出来。

注意要特殊处理非法词。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; typedef unsigned long long ull; unordered_set<ull> dic;//要背的单词的词典
unordered_map<ull,int> cnt;//当前区间要背单词的数量 int n,m;
ull get_hash(char *s) {
ull res=0;
for(int i=0; s[i]!='\0'; i++) {
res=res*19260817+s[i];
}
return res;
} char str[15];
ull a[100005]; int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%s",str);
dic.insert(get_hash(str));
}
scanf("%d",&m);
int cntv=0;
int len=0;
int head=1;//尺取区间的头 int maxcnt=0;
int maxcnt_len=0;
for(int i=1; i<=m; i++) {
scanf("%s",str);
ull ha=get_hash(str);
a[i]=ha;
if(cnt.size()==0) {
//刚刚开始处理,尺取区间里面没有有效单词
if(!dic.count(ha)) {
//这个单词也是无效的,直接把head指向下一个位置
head++;
} else {
//这个单词是有效的,包含进来
cnt[ha]++;
//head固定在这里了,新单词导致cntv上升
cntv++;
//第一个单词使得len也上升了
len++;
if(cntv>=maxcnt) {
if(cntv>maxcnt) {
maxcnt=cntv;
maxcnt_len=len;
} else {
maxcnt_len=min(maxcnt_len,len);
}
}
}
} else {
//尺取区间的单词列表中至少有一个
if(!dic.count(ha)) {
//就算没用但是可能会把后面连起来,记上
len++;
} else {
//这个词是有用的
if(!cnt.count(ha)) {
//这个词没见过
cntv++;
}
cnt[ha]++;
len++;
while(!dic.count(a[head])||cnt[a[head]]>=2) {
//头部是非法词汇,或者头部是合法词汇,且至少重复了1次,把头部取出
if(dic.count(a[head]))
cnt[a[head]]--;
head++;
len--;
}
//现在头部必定是不重复的合法词汇,且至少有1个
if(cntv>=maxcnt) {
if(cntv>maxcnt) {
maxcnt=cntv;
maxcnt_len=len;
} else {
maxcnt_len=min(maxcnt_len,len);
}
}
}
}
} printf("%d\n%d\n",maxcnt,maxcnt_len); return 0;
}

洛谷 - P1381 - 单词背诵 - 哈希 - 尺取的更多相关文章

  1. 洛谷 P1381 单词背诵

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

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

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

  3. 洛谷 P1101 单词方阵

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

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

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

  5. 洛谷 P1226 【模板】快速幂||取余运算

    题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...

  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 ...

随机推荐

  1. js如何获取手机的屏幕尺寸

    var width = $(document.body).outerWidth();//手机的屏幕宽 var height = $(window).innerHeight(); //手机的屏幕高

  2. ios 常见错误整理 持续更新

    本文转载至 http://blog.csdn.net/yesjava/article/details/8086185  1. mutating method sent to immutable obj ...

  3. wince c# 创建桌面快捷方式 自动启动 只运行一次 全屏显示

    using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.R ...

  4. LogStash 日志搜集

    安装 下载:https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz 解压到指定目录即可 配置 bin目录添加logsta ...

  5. NET 并发编程

    场景并发调用API 1.简单封装httpclient public class CommonHelper { private static readonly HttpClient _httpClien ...

  6. asp.net mvc4 之Webapi之应用客户端访问服务器端

    一.说明 客户端项目类型设计为:winform(winform窗体项目类型) 服务器端项目类型设计为:asp.net mvc4  webapi 在这里分为项目运行和调试两种情况讨论: 运行: 这种情况 ...

  7. Communicating sequential processes

    the-way-to-go_ZH_CN/01.2.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  8. SPDY: An experimental protocol for a faster web HTTP/2

    http://www.chromium.org/spdy/spdy-whitepaper https://en.wikipedia.org/wiki/SPDY Internet protocol su ...

  9. RecyclerView 可以与CollapsingToolbarLayout一起使用

    Item  布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  10. Vue的watch和computed属性

    Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 <!DOCTYPE html> <html> <head> <meta c ...