Cod sursa(job #2066956)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 15 noiembrie 2017 18:37:45
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 1000005

using namespace std;

int n, t, poz[N], nr, lung_max;
char s[N];

void prefix()
{
    int j=0, st=1;
    for(int i=2;i<=n;i++)
    {
        while(j && s[j+1]!=s[i])
            j=poz[j];
        if(s[j+1]==s[i])
            j++;
        poz[i]=j;
    }
}

void parcurgere()
{
    for(int i=2;i<=n;i++)
        if(poz[i] && i%(i-poz[i])==0)
        {
            if(lung_max<i-poz[i])
                lung_max=i-poz[i], nr=1;
            if(lung_max==i-poz[i])
                nr++;
        }
}

int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    scanf("%d\n", &t);
    for(int test=1;test<=t;test++)
    {
        fgets(s+1, N, stdin);
        n=strlen(s+1)-1;
        nr=1;
        s[n+1]='\0';
        memset(poz, 0, sizeof(poz));
        prefix();
        lung_max=0;
        parcurgere();
        printf("%d\n", nr*lung_max);
    }
    return 0;
}