D题求助


#include<bits/stdc++.h>
using namespace std;
#define for1(i,a,b) for(int i=(a);i<=(b);i++)
#define for2(i,a,b) for(int i=(a);i>=(b);i--)
typedef long long LL;
typedef pair<int,int>PII;
typedef pair<double,double>PDD;
typedef unsigned long long ULL;
typedef pair<long long,int> PLI;
const int N = 1e6+10,M=1e5+10;
const ULL base = 131;
int n,m,k;
char s[N];
ULL h[N],p[N];
unordered_map<ULL,int> mp,lst;//lst保存的是字符串上一次出现的右端点的位置,mp保存的是字符串不交出现的次数
ULL get(int l,int r)
{
	if(l>r) swap(l,r);
	return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m>>k;
	scanf("%s",s+1);
	p[0]=1;
	for1(i,1,n){
		h[i]=h[i-1]*base+s[i];
		p[i]=p[i-1]*base;
	}
	for(int i=m;i<=n;i++){
		if(lst[get(i,i-m+1)]<i-m+1){
			mp[get(i,i-m+1)]++;
			lst[get(i,i-m+1)]=i;
		}
	}
	int ans=0;
	for(auto x:mp){
		if(x.second==k) {
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

全部评论
hack数据: 4 3 1 4048 你的代码输出1,答案是2。
点赞 回复 分享
发布于 2023-09-04 17:30 湖南

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务