Cod sursa(job #1226585)

Utilizator alecsandrualex cuturela alecsandru Data 6 septembrie 2014 12:42:35
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#include<vector>
using namespace std;
char A[2000001];
int i,pre,k[2000001],nr,l,t,test;
vector <int> v;
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d\n",&t);
    for(test=1;test<=t;test++)
    {
        gets(A);
        int n=1;
        for(i=1;A[i]!=0;i++)
        {
            n++;
            pre=k[i-1];
            while(A[pre]!=A[i]&&pre>0)
            {
                pre=k[pre-1];
            }
            if(A[i]!=A[pre])
                k[i]=0;
            else
                k[i]=pre+1;
            if(2*k[i]==i+1)
            {
                l=(i+1)/2;
                nr=2;
            }
            else if(l!=0&&k[i]!=0&&k[i]%l==0&&(2*k[i]-i-1)%l==0&&k[i]*2>=i)
            {
                nr++;
            }
        }
        printf("%d\n",nr*l);
    }
    return 0;
}