洛谷 - P1381 - 单词背诵 - 哈希 - 尺取
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 - 单词背诵 - 哈希 - 尺取的更多相关文章
- 洛谷 P1381 单词背诵
洛谷 P1381 单词背诵 洛谷传送门 题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的 ...
- 洛谷 P1381 单词背诵 解题报告
P1381 单词背诵 题目描述 灵梦有\(n\)个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由\(m\)个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只 ...
- 洛谷 P1101 单词方阵
题目链接 https://www.luogu.org/problemnew/show/P1101 题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中 ...
- 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序
洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...
- 洛谷 P1226 【模板】快速幂||取余运算
题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...
- 洛谷 P1019 单词接龙 (DFS)
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
- 洛谷——P1101 单词方阵
https://www.luogu.org/problem/show?pid=1101#sub 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放 ...
- 洛谷P1101 单词方阵——S.B.S.
题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...
- 洛谷P1808 单词分类
题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等. 例如“AABA ...
随机推荐
- Markov Decision Processes
为了实现某篇论文中的算法,得先学习下马尔可夫决策过程~ 1. https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/conte ...
- HUD 2031: 进制转换
进制转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 关于wpf中popup跟随鼠标移动显示
最近在做一个画图工具,里面有一个功能是需要实现,当鼠标移动的时候在,鼠标的旁边显示坐标信息. 第一反应是想到了tooltip,但是tooltip有许多的限制,查询资料的过程中看到了popup,popu ...
- Js 模拟鼠标点击事件
var obj = document.getElementById('go'); if(document.all){ obj.click(); }else{ var e = document.crea ...
- Open Source Streaming Server--EasyDarwin
Welcome to EasyDarwin Streaming Server, which is an open source Streaming Server Based On Appple's D ...
- spring 过滤器简介
spring 过滤器简介 过滤器放在容器结构的什么位置 过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet.一个Jsp页面,甚至是一个HTML页面)之前截获进入的请 ...
- 九度OJ 1094:String Matching(字符串匹配) (计数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1259 解决:686 题目描述: Finding all occurrences of a pattern in a text is a p ...
- 【C++基础学习】数据封装、构造函数
第一部分 类和对象 内存中按照用途被划分的五个区:栈区.堆区.全局区.常量区.代码区栈区由系统来进行控制,无论是内存的分配还是回收都不需要程序员关心堆区由new分配内存,使用完成之后必须使用delet ...
- Windows程序设计(1)——Win32运行原理(二)
创建进程 1 进程和线程 2 应用程序的启动过程 3 CreateProcess函数 4 实例 3 创建进程 3.1 进程和线程 进程通常被定义为一个存在运行的程序的实例.进程是一个正在运行的程序,它 ...
- Ubuntu下安装Python3.4及用python编译py文件
1.安装python 3.4程序 sudo apt-get install python3.4 2.python 3.4是被默认安装在/usr/local/lib/python3.4,删除默认pyth ...