Cod sursa(job #1252798)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 31 octombrie 2014 12:02:45
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;
int T, n, i, k, pi[1000005];
char s[1000005];
int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    scanf("%d\n", &T);
    while(T--)
    {
        gets(s+1);
        n=strlen(s+1);
        pi[1]=0;k=0;
        for(i=2;i<=n;i++)
        {
            while(k>0&&s[i]!=s[k+1]) k=pi[k];
            if(s[i]==s[k+1]) k++;
            pi[i]=k;
        }
        for(i=n;i>=1;i--)
            if(pi[i]&&(i%(i-pi[i])==0))
            {
                printf("%d\n", i);
                break;
            }
        if(i==0) printf("0\n");
    }
    return 0;
}