1. /*
  2. 手打的哈希+线性的维护
  3. 第一问:hash一下 并且用个h记录某个单词要背的
  4. 第二问:线性的跑一边
  5. 开始队列里装下前一些单词使这一坨符合要求 并且记录出现次数num
  6. 然后开始从前面删
  7. 删除的条件:要么是非法的单词(h值为0)
  8. 要么num值大于1
  9. 如果删不了就在进来一个 更新num
  10. 直到跑完 这过程中每次更新l
  11. 注意这样有极端数据 如果第一问答案为 0 需要特判一下
  12. */
  13. #include<iostream>
  14. #include<cstdio>
  15. #include<cstring>
  16. #include<map>
  17. #define maxm 100100
  18. #define maxn 100010
  19. #define mod 100007
  20. #define p 17
  21. using namespace std;
  22. char s[maxn][],ss[maxn][];
  23. int n,m,f[maxn],a[maxm],ans,l=maxn;
  24. int h[maxn],num[maxn],vis[maxn],head,tail;
  25. int get_hash(char *str)
  26. {
  27. int len=strlen(str),hash=;
  28. for(int i=;i<=len-;i++)
  29. hash=(hash*p+str[i]-'a')%mod;
  30. return hash;
  31. }
  32. int main()
  33. {
  34. scanf("%d",&n);
  35. for(int i=;i<=n;i++)
  36. scanf("%s",s[i]);
  37. scanf("%d",&m);
  38. for(int i=;i<=m;i++)
  39. {
  40. scanf("%s",ss[i]);
  41. f[get_hash(ss[i])]=;
  42. }
  43. for(int i=;i<=n;i++)
  44. {
  45. int tmp=get_hash(s[i]);
  46. if(f[tmp]==)
  47. {
  48. ans++;
  49. h[tmp]=;
  50. }
  51. }
  52. int si=;
  53. head++;
  54. while(tail<=m)
  55. {
  56. int tmp=get_hash(ss[++tail]);
  57. if(h[tmp])
  58. {
  59. if(vis[tmp]==)
  60. si++;
  61. num[tmp]++;
  62. vis[tmp]=;
  63. }
  64. if(si==ans&&si!=)
  65. {
  66. int x=get_hash(ss[head]);
  67. while(head<tail&&(h[x]==||num[x]>))
  68. {
  69. if(h[x])
  70. num[x]--;
  71. x=get_hash(ss[++head]);
  72. }
  73. l=min(l,tail-head+);
  74. }
  75. }
  76. if(ans)printf("%d\n%d\n",ans,l);
  77. else printf("0\n0");
  78. }

codevs3013单词背诵的更多相关文章

  1. CODEVS3013 单词背诵 【Hash】【MAP】

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

  2. 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0

    作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...

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

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

  4. 洛谷 P1381 单词背诵

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

  5. codevs 3013 单词背诵 hash

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

  6. [codeVS1204] 单词背诵

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

  7. CODEVS——T 3013 单词背诵

    http://codevs.cn/problem/3013/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  8. Luogu-1381 单词背诵

    先将n个单词插入哈希表,记录左右端点,每次右端点往后移动,读入一个新的单词并记录下它的哈希值,如果这个单词之前没出现过那么更新\(ans\)和\(minl\),如果左端点的单词出现了不止一次则可以往右 ...

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

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

随机推荐

  1. 机器学习实验报告:利用3层神经网络对CIFAR-10图像数据库进行分类

    PS:这是6月份时的一个结课项目,当时的想法就是把之前在Coursera ML课上实现过的对手写数字识别的方法迁移过来,但是最后的效果不太好… 2014年 6 月 一.实验概述 实验采用的是CIFAR ...

  2. const关键字与指针

    const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...

  3. shell排序算法

    今天看<The C Programming Language>的时候看到了shell排序算法, /* shellsort: sort v[0]...v[n-1] into increasi ...

  4. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  5. EntityFramework Core使用PostgreSQL

    EntityFramework Core使用PostgreSQL 0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用 ...

  6. 支付宝集成获取私钥与公钥-b

    项目需要,需要在客户端集成支付宝接口.就研究了一下:因为使用支付宝接口,就需要到支付宝官网:注册帐号,并申请.下面讲的是申请好之后的操作.登录成功之后,   店家我的商家服务—在页面的下方找到——&g ...

  7. Unity3d 项目管理 版本管理

    Unity3d中项目管理     版本管理 如果在提交文件的时候发现提示有"先更新,再提交的"提示的时候,这是因为,A提交了一个版本文件,版本是13,那么你还在修改版本为12的文件 ...

  8. UVA- 1504 - Genghis Khan the Conqueror(最小生成树-好题)

    题意: n个点,m个边,然后给出m条边的顶点和权值,其次是q次替换,每次替换一条边,给出每次替换的边的顶点和权值,然后求出这次替换的最小生成树的值; 最后要你输出:q次替换的平均值.其中n<30 ...

  9. soap协议

    定义: 简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息. 协议中的几个关键词术语: SO ...

  10. 字符串(后缀自动机):HDU 4622 Reincarnation

    Reincarnation Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...