Cod sursa(job #2684553)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 14 decembrie 2020 00:35:49
Problema Substr Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("substr.in");
ofstream out("substr.out");

const int MOD=666013;
const int BAZA = 127;

unsigned long long powe[20005],hashes[20005];
unordered_map<unsigned long long,int> m;
char s[20005];

int conv(char s)
{
	if(s>='a' && s<='z') return s-'a';
	if(s>='A' && s<='Z') return s-'A'+26;
	return s-'0'+52;
}
int main()
{
	int n,k;
	in>>n>>k;
	in>>(s+1);
	powe[0]=1;
	for(int i=1;i<=n;i++)
	{
		powe[i]=(1ll*powe[i-1]*BAZA);
		hashes[i]=(1ll*hashes[i-1]*BAZA+conv(s[i])+1);
	}
	int st=0;
	int dr=n;
	int ans=0;
	while(st<=dr)
	{
		bool ok=0;
		int mid=(st+dr)/2;
		for(int i=1;i<n-mid+1;i++)
		{
			unsigned long long aux=hashes[i+mid-1]-hashes[i-1]*powe[mid];
			m[aux]++;
		}
		for(auto x:m)
		{
			if(x.second>=k)
			{
				ok=1;
				ans=mid;
				break;
			}
		}
		m.clear();
		if(ok==1) st=mid+1;
		else dr=mid-1;
	}
	out<<ans;
	return 0;
}