Cod sursa(job #1523349)

Utilizator maria.nastaseNastase Maria maria.nastase Data 12 noiembrie 2015 17:14:58
Problema Substr Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define N 16385
#define m 100007
#define b 123
using namespace std;

char s[N];
int v[N];
int main()
{
    freopen("substr.in","r",stdin);
    freopen("substr.out","w",stdout);
    int n, k, st, dr, mij, nr, p=1, cont=0, i, j, t=0, tmax=0, total=0;
    scanf("%d%d",&n, &k);
    scanf("%s",s);
    st=1;
    dr=n;
    while(st<=dr)
    {
        nr=0;
        cont=0;
        t=1;
        tmax=-1;
        mij=(st+dr)/2;
        p=1;
        for(i=0; i<mij; i++)
        {
            nr=(nr*b+s[i])%m;
            if(i>=1)
                p=(p*b)%m;
        }
        v[cont]=nr;
        cont++;
        for(i=0, j=mij; j<n; i++, j++)
        {
            nr=(((nr-(s[i]*p)%m+m)%m)*b+s[j])%m;
            v[cont]=nr;
            cont++;
        }
        sort(v, v+cont);
        for(i=1; i<cont; i++)
            if(v[i-1]!=v[i])
            {
                if(tmax<t)
                {
                    tmax=t;
                    t=1;
                }
            }
            else
                t++;
        if(tmax>=k)
        {
            total=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    printf("%d",total);
    return 0;
}