#include <bits/stdc++.h> #define M 200010 using namespace std; char s[M]; int i,n,m; struct set_hash{ int hash_pow[M]; int hash_val[M]; int p,P; void _init(int p_,int P_) { p=p_; P=P_; hash_pow[0]=1; for(i=1;i<=n;i++) { hash_val[i]=(1ll*hash_val[i-1]*p+s[i]-'a'+1)%P; hash_pow[i]=1ll*hash_pow[i-1]*p%P; } } int _get_hash_val(int l,int r) { return (hash_val[r]-1ll*hash_val[l-1]*hash_pow[r-l+1]%P+P)%P; } }ha,hb; int HA[M],HB[M],t; int main(){ scanf("%d%d%s",&n,&m,s+1); ha._init(61,1000000007); hb._init(97,1000000009); for(i=1;i+m-1<=n;i++) { HA[i]=ha._get_hash_val(i,i+m-1); HB[i]=hb._get_hash_val(i,i+m-1); } sort(HA+1,HA+n-m+2); sort(HB+1,HB+n-m+2); t=1; for(i=2;i<=n-m+1;i++) { if(HA[i]!=HA[i-1]||HB[i]!=HB[i-1]) t++; } printf("%d",t); }
asfd
猜你喜欢
转载自www.cnblogs.com/Lamboofhome/p/11643948.html
今日推荐
周排行