JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
2017-11-08 22:45
411 查看
Description
nodgd写了一篇文章,自认为这是一篇好文章。nodgd的文章由n个小写英文字母组成。文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数。nodgd在文章中用了排比、对偶、前后照应之类的手法,所以就有很多个子串是相同或者相近的。为了向大家证明这是一篇好文章,nodgd决定给自己的文章进行评分。nodgd首先确定了一个整数m,然后统计出文章中有多少个不相同的长度为m的子串,这个数量就是文章的评分。然而,nodgd懒得老老实实计算这个评分了,就把任务丢给了你。
Input
第一行包含两个整数n,m,表示文章的长度和需要统计的子串长度。第二行包含一个长度为n的只包含小写字母的字符串。
Output
输出一行一个整数,表示文章的评分。Sample Input
输入1:
5 3aaaab
输入2:
9 3abcabacba
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 位的哈希值,之后一位一位推到后面即可。
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 ; char s ; 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; }
相关文章推荐
- [jzoj5462]【NOIP2017提高A组冲刺11.8】好文章
- JZOJ5462. 【NOIP2017提高A组冲刺11.8】好文章
- JZOJ5463. 【NOIP2017提高A组冲刺11.8】证书
- Jzoj5462【NOIP2017提高A组冲刺11.8】好文章
- 【JZOJ 5461】【NOIP2017提高A组冲刺11.8】购物
- jzoj5463 【NOIP2017提高A组冲刺11.8】证书
- JZOJ5461. 【NOIP2017提高A组冲刺11.8】购物
- JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- JZOJ 5453. 【NOIP2017提高A组冲刺11.5】好路线
- JZOJ5460. 【NOIP2017提高A组冲刺11.7】士兵训练
- [JZOJ5445]【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- [JZOJ5446]【NOIP2017提高A组冲刺11.3】高考是不可能高考的(2-SAT问题)【Atcoder regular context 069F】
- JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
- JZOJ5465. 【NOIP2017提高A组冲刺11.9】道路重建
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- 【JZOJ 5451】【NOIP2017提高A组冲刺11.4】Genocide
- JZOJ5448. 【NOIP2017提高A组冲刺11.3】机房比教室好多了