Cod sursa(job #1197225)

Utilizator tudormaximTudor Maxim tudormaxim Data 11 iunie 2014 12:15:10
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1000001;
int t;
int v[N];
char c[N];
void f(char c[],int n)
{
    int i; int k=-1; int max=0;
    v[0]=0;
    for(i=1; i<n; i++)
    {
        while (k>-1 && c[k+1] != c[i])
            k=v[k]-1;
        if (c[k+1] == c[i])
            ++k;
        v[i]=k+1;

    }
    for(i=n-1;i>=1;i--)
    {
        if (v[i] != 0 && (i+1)%(i+1-v[i]) == 0)
            {
                max=i+1;
                break;
            }
    }
    printf("%d\n",max);
}

void solve()
{
    int i;int j;int n;
    for(i=1;i<=t;i++)
    {
        scanf("%s\n",c);
        n=strlen(c);
        f(c,n);
    }
}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&t);
    solve();
    return 0;
}