Cod sursa(job #1471637)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 14 august 2015 18:48:26
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <cstring>

#define DIM 1000007

using namespace std;
FILE *fin, *fout;
int pi[DIM], sol[DIM], t, ans;
char s[DIM];

void init()
{
    memset(pi, 0, sizeof(pi));
    memset(sol, 0, sizeof(sol));
    memset(s, 0, sizeof(s));
    ans = 0;
}
void citire()
{
    scanf("%s", s+1);
}
void prefix()
{
    int k = 0, sze = strlen(s + 1);
    for(int i = 2; i<= sze; ++i)
    {
        while(k && s[k + 1] != s[i]) k = pi[k];
        if(s[k + 1] == s[i]) ++k;
        pi[i] = k;
    }
}
void find_ans()
{
    int sze = strlen(s + 1);
    for(int i = sze; i>= 1; --i)
    {
        if(pi[i] && !(i%(i - pi[i]))) {ans = i;break;};
    }
}
void afisare()
{
    printf("%d\n", ans);
}

int main()
{
    fin = freopen("prefix.in", "r", stdin);
    fout = freopen("prefix.out", "w", stdout);
    scanf("%d", &t);
    for(int i = 1; i<= t; ++i)
    {
        init();
        citire();
        prefix();
        find_ans();
        afisare();
    }
    fclose(fin);
    fclose(fout);
    return 0;
}