Cod sursa(job #1469628)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 8 august 2015 23:01:18
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>
#include <cstring>
using namespace std;
const char iname[] = "prefix.in";
const char oname[] = "prefix.out";
const int lmax = 1000010;
int pr[lmax],i,k,m;
char P[lmax];

int main()
{
    freopen(iname,"r",stdin);
    freopen(oname, "w", stdout);
    int T;
    scanf("%d\n", &T);
    for(int q = 0; q < T; q++)
    {
        scanf("%s\n",P+1);
        k = 0, m = strlen(P+1);
        pr[1] = 0;
        for(i = 2; i <=m; i++)
        {while(k>0 && P[k+1] != P[i])k = pr[k];
         if(P[k+1] == P[i])k++;
         pr[i] = k;}
        for(i = m; i; --i)if(pr[i] > 0 && i%(i-pr[i])==0){printf("%d\n",i);break;}
        if(!i) printf("0\n");
    }
    return 0;
}