Cod sursa(job #2684556)

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

using namespace std;

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

const int BAZA = 103;

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

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]=powe[i-1]*BAZA;
		hashes[i]=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) {ans=mid;st=mid+1;}
		else dr=mid-1;
	}
	out<<ans<<"\n";
	return 0;
}