Luogu-1381 单词背诵
先将n个单词插入哈希表,记录左右端点,每次右端点往后移动,读入一个新的单词并记录下它的哈希值,如果这个单词之前没出现过那么更新\(ans\)和\(minl\),如果左端点的单词出现了不止一次则可以往右缩,从而保证长度最短。
#include<map>
#include<cmath>
#include<ctime>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read(){
	int ans=0,fh=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			fh=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
		ans=(ans<<1)+(ans<<3)+ch-'0',ch=getchar();
	return ans*fh;
}
typedef long long ll;
typedef unsigned long long ull;
const int maxn=1e5+100,maxm=1e3+100;
const ull base=131,P=1e6+3;
struct hash{
	int siz[P],cz[P];
	inline ull gethash(char *s){
		ull ans=0;
		for(int i=0,L=strlen(s);i<L;i++)
			ans=(ans*base+s[i])%P;
		return ans;
	}
//	inline void revise(char *s,int z){
//		ull x=gethash(s);
//		siz[x]+=z;
//	}
	inline void insert(char *s){
		ull x=gethash(s);
		cz[x]=1;
	}
//	inline int query(char *s){
//		ull x=gethash(x);
//		return siz[x];
//	}
	inline int find(char *s){
		ull x=gethash(s);
		if(!cz[x]) x=-1;
		return x;
	}
}h;
int n,a[maxn],m,ans,minl;
char s[maxm];
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%s",s),h.insert(s);
	scanf("%d",&m);
	int l=0;
	for(int i=1;i<=m;i++){
		scanf("%s",s);
		int x=h.find(s);
		a[i]=x;
		if(~x){
			if(h.siz[x]==0) ans++,minl=i-l;
			h.siz[x]++;
			while(a[l+1]==-1||h.siz[a[l+1]]>1)
				l++,h.siz[a[l]]--,minl=min(minl,i-l);
		}
	}
	printf("%d\n%d\n",ans,minl);
	return 0;
}
Luogu-1381 单词背诵的更多相关文章
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
		作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ... 
- 洛谷 P1381 单词背诵 解题报告
		P1381 单词背诵 题目描述 灵梦有\(n\)个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由\(m\)个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只 ... 
- CODEVS3013 单词背诵 【Hash】【MAP】
		CODEVS3013 单词背诵 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要 ... 
- 洛谷 P1381 单词背诵
		洛谷 P1381 单词背诵 洛谷传送门 题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的 ... 
- codevs 3013 单词背诵    hash
		题目链接 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一 ... 
- 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取
		https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ... 
- [codeVS1204] 单词背诵
		题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情 ... 
- CODEVS——T 3013 单词背诵
		http://codevs.cn/problem/3013/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 De ... 
- codevs3013单词背诵
		/* 手打的哈希+线性的维护 第一问:hash一下 并且用个h记录某个单词要背的 第二问:线性的跑一边 开始队列里装下前一些单词使这一坨符合要求 并且记录出现次数num 然后开始从前面删 删除的条件: ... 
- luogu p1101 单词方阵
		https://www.luogu.org/problem/show?pid=1101 很恶心的代码 就是八个方向都搜索 #include<bits/stdc++.h> using na ... 
随机推荐
- POJ 3126  Prime Path (BFS+剪枝)
			题目链接:传送门 题意: 给定两个四位数a.b,每次能够改变a的随意一位.而且确保改变后的a是一个素数. 问最少经过多少次改变a能够变成b. 分析: BFS,每次枚举改变的数,有一个剪枝,就是假设这个 ... 
- [译]GLUT教程 - 游戏模式
			Lighthouse3d.com >> GLUT Tutorial >> Extras >> Game Mode 根据GLUT官网的说明,GLUT的游戏模式是为开启 ... 
- HDFS源码分析数据块校验之DataBlockScanner
			DataBlockScanner是运行在数据节点DataNode上的一个后台线程.它为所有的块池管理块扫描.针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独 ... 
- Unable to resolve address ' ' service ' ': Name or service not known
			感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ... 
- 【elasticsearch】安装合集
			[elasticsearch](1)centos7 使用yum安装elasticsearch 2.X [elasticsearch](2)centos7 超简单安装elasticsearch 的监控. ... 
- php 模拟get和post提交方法[解决ajax跨域问题]
			get: $url = "http://www.111cn.net /index.php?a=b&c=d&e=f&g=" . urlencode('王璐个人 ... 
- Openstack(Kilo)安装系列之环境准备(一)
			本文采用VMware虚拟环境,使用CentOS 7.1作为openstack的基础环境. 一.基础平台 1.一台装有VMware的windows系统(可联网) 2.CentOS 7.1 64bit镜像 ... 
- 由浅到深理解ROS(1)
			ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ... 
- 批处理--md5校检
			@echo off rem 获取文件xx.zip的MD5 for /f "delims=" %%i in ('md5.exe xx.zip') do (set md5_var=%% ... 
- 划分Linux分区
			/ Swap 这二个分区是必须有的. /usr linux系统都在 /usr 中 /home 用户信息都在 /home 下 /var 保持所有服务器的登录文件,且Web默认的路径在 /var中 可以 ... 
