Cod sursa(job #2350997)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 21 februarie 2019 21:14:03
Problema Reguli Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;

char s[1000003];
int n;
int prefix[1000003];

void pref()
{
    int k = 0;
    for(int i = 2; i<=n; i++)
    {
        while(s[i] != s[k+1] && k>0)
        {
            k = prefix[k];
        }
        if(s[i] == s[k+1])
        {
            k++;
        }
        prefix[i] = k;
    }
}

void afis()
{
    for(int j = n; j>=1; j--)
    {
        if(prefix[j] >= (j+1)/2 && prefix[j]%(j-prefix[j]) == 0)
        {
            printf("%d\n", j);
            return;
        }
    }
    printf("0\n");
}

void rez()
{
    int t;
    scanf("%d\n", &t);
    for(int i = 0; i<t; i++)
    {
        memset(prefix, 0, sizeof(prefix));
        fgets(s+1, 1000003, stdin);
        n = strlen(s+1)-1;
        pref();
        /*for(int i = 1; i<=n; i++)
        {
            printf("%d ", prefix[i]);
        }
        printf("\n");*/
        afis();
    }
}

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