Cod sursa(job #1048118)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 5 decembrie 2013 12:42:15
Problema Substr Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#define mod 666013
#include<map>
using namespace std;


ifstream f("substr.in");
ofstream g("substr.out");
int n,k,st,dr,mid,ans,i;
map <int,int> hash;
map<int,int>::iterator it;
char a[17000];
int check(	int L ) {
	hash.clear();
	int Val=0;
	int baza=33;
	int mult=1;
	int dif;
	
	for(i=0;i<L;++i) {
		Val=(Val*baza+a[i])%mod;
		mult=(mult*baza)%mod;
	}
	hash[Val]=1;
	if(k==1)
		return 1;
	
	for(i=L;i<n;++i) {
		
		Val=(Val*baza+a[i])%mod;
		dif=(a[i-L]*mult)%mod;
		Val=Val-dif;
		if(Val<0)
			Val+=mod;
		it=hash.find(Val);
		if(it==hash.end())
			hash[Val]=1;
		else {
			it->second++;
			if(it->second>=k)
				return 1;
		}
	}
	return 0;
}
int main () {
	
	f>>n>>k;
	
	f>>a;
	
	st=0;dr=n;
	
	while(st<=dr) {
		mid=(st+dr)/2;
		
		if(check(mid)){ 
			ans=mid;
			st=mid+1;
		}
		else
			dr=mid-1;
	}
	g<<ans<<"\n";
	return 0;
}