codevs3013单词背诵

/*
手打的哈希+线性的维护
第一问:hash一下 并且用个h记录某个单词要背的
第二问:线性的跑一边
开始队列里装下前一些单词使这一坨符合要求 并且记录出现次数num
然后开始从前面删
删除的条件:要么是非法的单词(h值为0)
            要么num值大于1
如果删不了就在进来一个 更新num
直到跑完  这过程中每次更新l
注意这样有极端数据 如果第一问答案为 0 需要特判一下
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define maxm 100100
#define maxn 100010
#define mod 100007
#define p 17
using namespace std;
char s[maxn][12],ss[maxn][12];
int n,m,f[maxn],a[maxm],ans,l=maxn;
int h[maxn],num[maxn],vis[maxn],head,tail;
int get_hash(char *str)
{
    int len=strlen(str),hash=0;
    for(int i=0;i<=len-1;i++)
      hash=(hash*p+str[i]-‘a‘)%mod;
    return hash;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      scanf("%s",s[i]);
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
      {
          scanf("%s",ss[i]);
        f[get_hash(ss[i])]=1;
      }
    for(int i=1;i<=n;i++)
      {
          int tmp=get_hash(s[i]);
          if(f[tmp]==1)
          {
            ans++;
            h[tmp]=1;
          }
      }
    int si=0;
    head++;
    while(tail<=m)
      {
          int tmp=get_hash(ss[++tail]);
          if(h[tmp])
          {
              if(vis[tmp]==0)
              si++;
              num[tmp]++;
              vis[tmp]=1;
          }
          if(si==ans&&si!=0)
            {
                int x=get_hash(ss[head]);
                while(head<tail&&(h[x]==0||num[x]>1))
                  {
                      if(h[x])
                  num[x]--;
                x=get_hash(ss[++head]);
              }
            l=min(l,tail-head+1);
          }
      }
    if(ans)printf("%d\n%d\n",ans,l);
    else printf("0\n0");
}
时间: 2024-10-08 20:01:50

codevs3013单词背诵的相关文章

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

作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/  感觉我要火~~这比我是装定了!! 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数据库.以及TTS文本识别语音单词朗读的一款软件. 第一款软件的sql数据库软件的编写:http://www.cnblogs.com/xiaobo-Linux/p/4676950.html 现在来讲解我的第二款高大上的代码: 这个是.pro的代码,其中axconta

[CODEVS3031] 单词背诵 - 字符串hash

3013 单词背诵 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入描述 Input Description 第1行一个数n, 接下来n行每行是一个

单词背诵 500 个考过二十次以上词汇

单词背诵 500 个考过二十次以上词汇above / beyond:  介词,后面接抽象而不是具体名词时表示 “ 无法做到 ” ,例如: “above comprehension” 的意思是 “ 无法理解 ”. .in the absence of something: “ 缺少,没有 ” ,用于替代 “in short of” 或者 “be lacking in” .be absorbed in something: “ 专心从事 ” .abuse:  用在物品词后面表示 “ 过量使用 ” ,

【luogu P1381单词背诵】题解

单词背诵 题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入格式 第1行一个数n, 接下来n行每行是一个长度不超过10的字符串,表示一个要背的单词. 接着是一个数m, 然后是m行长度不超过10的字符串,每个表示文章中的一个单词. 输出格式 输出文件共2行.第1行

【CodeVS3013】单词背诵

Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. Input 第1行一个数n, 接下来n行每行是一个长度不超过10的字符串,表示一个要背的单词. 接着是一个数m, 然后是m行长度不超过10的字符串,每个表示文章中的一个单词. Output 输出文件共2

单词背诵【CodeVS3013】 哈希

问题描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入格式 第1行一个数n,接下来n行每行是一个长度不超过10的字符串,表示一个要背的单词. 接着是一个数m,然后是m行长度不超过10的字符串,每个表示文章中的一个单词. 输出格式 输出文件共2行.第1行为文章中最多包

CODEVS——T 3013 单词背诵

http://codevs.cn/problem/3013/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入描述 Input

codevs 3013 单词背诵 hash

题目链接 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入描述 Input Description 第1行一个数n, 接下来n行每行是一个长度不超过10的字符串,表示一个要背的单词. 接着是一个数m, 然后是m行长度不超过10的字符串,

[codeVS1204] 单词背诵

题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了. 输入输出格式 输入格式: 第1行一个数n, 接下来n行每行是一个长度不超过10的字符串,表示一个要背的单词. 接着是一个数m, 然后是m行长度不超过10的字符串,每个表示文章中的一个单词. 输出格式: 输出文件共2行