Description

小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。
由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。
现在他向你求助,需要你编写程序完成这项艰巨的任务。

Input

第1行3个正整数N,M,L,表示文章的数目,单词至少出现在M篇文章中和每个单词的长度。
接下来N行,每行一个字符串,表示一篇文章。

Output

仅一行,表示满足检索条件的单词数。

Sample Input

3 2 2
noip
istudycpp
imacppstudent

Sample Output

5
【样例解释】
这5个单词分别为:st,tu,ud,pp,cp。

Data Constraint

对于20%的数据有 1≤N,M≤101≤N,M≤10;
对于60%的数据有 1≤N,M≤1001≤N,M≤100;
对于100%的数据有 1≤N,M≤2000,L≤10001≤N,M≤2000,L≤1000。每篇文章长度不大于1000,均有小
写字母组成。

Solution

  • 这题是典型的 字符串Hash ,开散列。

  • 先枚举每篇文章,在枚举其中的每个单词,把单词转换成模意义下26进制,质数取 109+710^9+7 。

  • 之后把这个数放进 Hash 表中,判断是否存在,达到m次即答案+1,上限取 2∗1062*10^6 。

枚举过程中注意边加边判断,总时间复杂度为 O(N∗(N−L))O(N*(N-L)) !

Code

#include<cstdio>
#include<cstring>
using namespace std;
const int N=1002,M=N*N*2,mo=1e9+7;
int n,m,l,ans;
int f[M],g[M];
long long p[N],h[M];
char s[N];
inline int hash(int x)
{int y=x%M;while(h[y] && h[y]!=x) y=(y+1)%M;return y;
}
int main()
{scanf("%d%d%d",&n,&m,&l);for(int i=p[0]=1;i<l;i++) p[i]=p[i-1]*26%mo;n++;while(--n){scanf("%s",s+1);int len=strlen(s+1);long long sum=0;for(int i=1;i<l;i++) sum=(sum+p[l-1-i]*s[i])%mo;for(int i=l;i<=len;i++){sum=(sum+mo-p[l-1]*s[i-l]%mo)%mo;sum=(sum*26+s[i])%mo;int k=hash(sum);h[k]=sum;if(g[k]!=n){if(++f[k]==m) ans++;g[k]=n;}}}printf("%d",ans);return 0;
}

JZOJ 3870. 【NOIP2014八校联考第4场第1试10.19】单词检索(search)相关推荐

  1. JZOJ 3871. 【NOIP2014八校联考第4场第1试10.19】无聊的游戏(game)

    Description 学校的运动会开始了,体能很菜的小可可没报任何比赛项目,于是和同学们玩一个十分无聊的游戏. 游戏在一个由 n∗nn*n 个方格组成的正方形棋盘上进行,首先在每个方格上均匀随机地填 ...

  2. JZOJ 3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

    Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条 ...

  3. 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

    ####Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧 ...

  4. 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)...

    ####Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧 ...

  5. 反抗希碧拉系统续(NOIP2014八校联考第3场第1试10.4)

    看了题解才会做的题..感觉有点思想有点妙就来写一发吧... 题意简版 给出一个特殊的正则表达式,有如下递归定义: 元素:="["+字符集+"]",表示匹配字符集 ...

  6. JZOJ 3853. 【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)

    Description Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30, ...

  7. JZOJ 3852. 【NOIP2014八校联考第2场第2试9.28】单词接龙(words)

    Description Bsny从字典挑出N个单词,并设计了接龙游戏,只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来. Bsny想要知道在所给的所有单词中能 ...

  8. 计算机网络八校联考,八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难?...

    原标题:八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难? 近日,湖北省内高中有名的阶段性考试"八校联考"成绩出炉,这也是湖北省高三复课后的第一次线下全省统一考试. 小 ...

  9. JZOJ 4238. 【五校联考5day2】纪念碑

    Description 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一个长为n,宽为m的矩形.它由n* m个1*1的 ...

最新文章

  1. 使用 .NET 框架轻松开发完美的 Web 窗体控件
  2. 哈希一致性、哈希取余、自定义轮询分片的比较
  3. 大国AI竞赛中国忙赶超,但美国仍主导全球AI芯片设计
  4. final、finally、finalize的区别
  5. python一行代码实现99乘法表_一行代码实现九九乘法表
  6. Spring Boot学习笔记-进阶(3)
  7. Label显示多行文本总结
  8. Initramfs应用问题记录
  9. NFS 服务安全加固
  10. mysql限制用户只能访问指定数据库
  11. 你还在全量加载iView么?试试手动配一个吧
  12. Spring中的循环依赖(单例)
  13. 仿王者荣耀HTML示例代码
  14. 计算机网络基础知识框架
  15. 最小割的必须割边和可行割边
  16. ubuntu设置MySQL密码
  17. 一键自动生成字幕、制作双语字幕,懒人必备
  18. 字符串中Emoji表情处理
  19. 跨平台框架这么多, 老夫无可奈何!
  20. 计算机储存配置信息,怎么看电脑配置信息

热门文章

  1. numpy.random.rand使用详解
  2. 吴恩达 coursera AI 专项五第三课(下)总结+作业答案
  3. Git学习笔记:分支管理(2)
  4. CentOS 6.X 关闭不需要的 TTY 方法
  5. IDE (Integrated Development Environment) 集成开发环境
  6. 【云炬大学生创业基础笔记】第1章第3节 什么是创业测试
  7. 【云炬大学生创业基础笔记】第1章第2节测试
  8. 云炬60s看世界20211119
  9. [云炬python3玩转机器学习笔记] 3-6Numpy数组和矩阵的合并和分割
  10. [云炬python3玩转机器学习笔记] 2-3监督学习、非监督学习、半监督学习和增强学习