Cod sursa(job #1495322)

Utilizator cristina_borzaCristina Borza cristina_borza Data 2 octombrie 2015 22:04:52
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
//#include <fstream>
#include <cstring>
#include <cstdio>

#define NMAX 1000005

using namespace std;

//ifstream f("prefix.in");
//ofstream g("prefix.out");

int n , m , pi[NMAX] , nr , T;
char c[NMAX];

int main()
{
    freopen("prefix.in" , "r" , stdin);
    freopen("prefix.out" , "w" , stdout);

    scanf("%d" , &T);//f >> T;

    while(T--) {
        scanf("%s" , c + 1);//f >> c + 1;
        n = strlen(c + 1);

        //memset(pi , 0 , sizeof(pi));

        pi[1] = 0;

        int k = 0;
        for(int i = 2 ; i <= n ; ++i) {
            while(k > 0 && c[i] != c[k + 1]) {
                k = pi[k];
            }

            if(c[i] == c[k + 1]) {
                ++k;
            }
            pi[i] = k;
        }
        bool ok = 1;
        for(int i = n ; i >= 1 ; --i) {
            if(pi[i] != 0 && i % (i - pi[i]) == 0) {
                printf("%d\n" , i);
                ok = 0;
                break;
            }
        }
        if(ok) printf("0\n");//g << sol << '\n';
    }
    return 0;
}