Description

nodgd写了一篇文章,自认为这是一篇好文章。nodgd的文章由n个小写英文字母组成。文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数。nodgd在文章中用了排比、对偶、前后照应之类的手法,所以就有很多个子串是相同或者相近的。为了向大家证明这是一篇好文章,nodgd决定给自己的文章进行评分。nodgd首先确定了一个整数m,然后统计出文章中有多少个不相同的长度为m的子串,这个数量就是文章的评分。
然而,nodgd懒得老老实实计算这个评分了,就把任务丢给了你。

Input

第一行包含两个整数n,m,表示文章的长度和需要统计的子串长度。
第二行包含一个长度为n的只包含小写字母的字符串。

Output

输出一行一个整数,表示文章的评分。

Sample Input

输入1:

5 3
aaaab

输入2:

9 3
abcabacba

Sample Output

输出1:

2

样例解释1:

长度为3的子串有3个,分别是aaa,aaa,aab,其中不同的只有2个。

输出2:

7

样例解释2

共有7个长度为3的子串,每个长度为3的子串都不同。

Data Constraint

对于30%的数据,1≤��≤��≤200;
对于50%的数据,1≤��≤��≤2000;
对于另外20%的数据,1≤��≤50≤��≤200000;
对于100%的数据,1≤��≤��≤200000。

Solution

  • 典型的字符串Hash,但是模数要开大点(或者双哈希),不然会被卡。

  • 先算出前 m<script type="math/tex" id="MathJax-Element-12">m</script> 位的哈希值,之后一位一位推到后面即可。

Code

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=2e5+5,mo=1e7+9;
const LL mod=1e15+7;
int n,m,ans;
LL sum,p;
LL h[mo];
int f[N];
char s[N];
inline int hash(LL x)
{int y=x%mo;while(h[y]>=0 && h[y]!=x) y=(y+1)%mo;return y;
}
int main()
{scanf("%d%d",&n,&m);scanf("%s",s+1);memset(h,-1,sizeof(h));ans=p=1;for(int i=m;i;i--){sum=(sum+(s[i]-'a')*p%mod)%mod;if(i>1) p=p*26%mod;}h[hash(sum)]=sum;for(int i=2;i<=n-m+1;i++){sum=(sum+mod-(s[i-1]-'a')*p%mod)%mod;sum=(sum*26%mod+s[i+m-1]-'a')%mod;int k=hash(sum);if(h[k]<0) h[k]=sum,ans++;}printf("%d",ans);return 0;
}

JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章相关推荐

  1. JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列

    Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...

  2. JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数

    Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数 ...

  3. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  4. JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  5. JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏

    Description 小A得了忧郁综合症,小B正在想办法开导她. 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权.小B定义一条路径的权值为所有经过边中的最大权值, ...

  6. JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书

    Description Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置. P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共 ...

  7. JZOJ 5460. 【NOIP2017提高A组冲刺11.7】士兵训练

    Description Input 第一行两个数n,q 表示士兵数以及阅兵次数. 接下来一行n-1 个整数,第i 个整数表示士兵i+1 的直属教官. 接下来n 行每行两个整数i i b ,l 描述一位 ...

  8. JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室

    Description 小X 正困在一个密室里,他希望尽快逃出密室. 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会 ...

  9. JZOJ 5454. 【NOIP2017提高A组冲刺11.5】仔细的检查

    Description nodgd家里种了一棵树,有一天nodgd比较无聊,就把这棵树画在了一张纸上.另一天nodgd更无聊,就又画了一张. 这时nodgd发现,两次画的顺序是不一样的,这就导致了原本 ...

最新文章

  1. 手机知识:手机的快充技术是什么,看完本文你就明白了!
  2. 《互联网+流通——F2R助力传统产业创新与转型》一一第1章 “互联网+”的新时代...
  3. Effective C++学习第八天
  4. C++设计模式-解释器模式
  5. linux系统脚本安装失败,ubuntu16.04下vim安装失败的原因分析及解决方案
  6. 2021款iPad Pro跑分曝光:远超安卓阵营产品
  7. STM8单片机低功耗---活跃停机(Active Halt)模式实现-3
  8. Java 1.2.4 文件输入输出时——文件的位置
  9. 在Linux下如何安装Jupyter Notebook
  10. sid图像数据_【技术前沿】首届“水下机器人目标抓取大赛”第一名的图像增强方法...
  11. 系统集成项目管理工程师(软考中级)—— 第二十二章 安全管理 笔记分享
  12. php最大的论坛,phpwind论坛史上最大漏洞 -电脑资料
  13. 使用python的PIL.Image在图片上写字
  14. 强化学习 蒲丰投针实验 蒙特卡洛算法
  15. win10正版office重新安装
  16. 7、Instant-ngp
  17. 【一周头条盘点】中国软件网(2018.1.29~2018.2.2)
  18. 【1024社区大奖】助你狂揽大奖[保姆级教程①]
  19. Hibernate开发实践笔记--对象在set属性时更新了数据库问题
  20. rust php 扩展,在PHP程序中使用Rust扩展的方法

热门文章

  1. 读书笔记:如何投论文
  2. JVM03Java代码执行流程
  3. 2020教资高频考点作文素材汇总
  4. [云炬创业基础笔记]第四章测试23
  5. 简单的串口助手程序开发
  6. [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
  7. 子div在父div中置底
  8. cannot resolve symbol ‘R‘ 程序包R不存在
  9. visual c++ 部分窗口样式设置
  10. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础