Cod sursa(job #2148771)

Utilizator binicBinica Nicolae binic Data 1 martie 2018 23:08:11
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<bits/stdc++.h>
using namespace std;
int n,k,p,m,ok,phi[1000004];
char s[1000004];
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d\n",&n);
    for(int j = 1; j <= n; j ++)
    {
        gets(s+1);
        m = strlen(s+1);
        k = 0;
        phi[1] = 0;
        p = 1;
        for(int i = 2; i <= m; i ++)
        {
            while(k>0 && s[i] != s[k+1])
                k = phi[k];
            if(s[i] == s[k+1])k++;
            phi[i] = k;
        }
        ok = 0;
        for(int i = m; i >= 1; i --)
            if(phi[i] > 0 && i % (i-phi[i]) == 0)
            {
                printf("%d\n",i);
                ok = 1;
                break;
            }
        if(ok == 0) printf("0\n");
        /*k = 1;
        for(int i = 2; i <= m; i ++)
            if(phi[i] != phi[i-1] + 1)
            {
                if(phi[i] == 0) k = i;
                else k = i-1;
            }
            else if(i%k == 0) ras = i;
        printf("%d \n",ras);*/
    }
    return 0;
}