Pagini recente » Diferente pentru utilizator/ghicicine intre reviziile 15 si 16 | Rating Mihnea-Alexandru Visan (AnAverageTurtle) | Istoria paginii utilizator/cezar1212 | Diferente pentru utilizator/ghicicine intre reviziile 11 si 12 | Cod sursa (job #528029)
Cod sursa(job #528029)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
vector <pair<pair<int,int>,int> > v;
char sir[16386];
int i,N,K,pow,ind,maxim,sol;
int aux[16386],cnt[16386];
int main()
{
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
scanf("%d %d\n",&N,&K);
N--;
fgets(sir,16386,stdin);
for(i=0;i<=N;i++) v.push_back(make_pair(make_pair((int)sir[i],0),i));
sort(v.begin(),v.end());
pow=2;
maxim=0;
sol=0;
while(pow<=N)
{
memset(aux,0,sizeof(aux));
memset(cnt,0,sizeof(cnt));
ind=0;
aux[v[0].second]=ind;
for(i=1;i<=N;i++)
{
if(v[i].first.first!=v[i-1].first.first) ind=i;
aux[v[i].second]=ind;
}
for(i=0;i<=N;i++) cnt[aux[i]]++;
for(i=0;i<=N;i++)
if(cnt[i]>maxim)
{
maxim=cnt[i];
sol=pow;
}
for(i=0;i<=N;i++)
{
v[i].first.first=aux[i];
v[i].second=i;
}
for(i=1;i<=N;i++)
if(i+pow<=N) v[i].first.second=v[i+pow].first.first;
else v[i].first.second=-1;
sort(v.begin(),v.end());
pow*=2;
}
if(maxim>=K) printf("%d\n",sol);
else printf("0\n");
return 0;
}