Cod sursa(job #1198663)

Utilizator livliviLivia Magureanu livlivi Data 16 iunie 2014 16:45:44
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
#include<string.h>
using namespace std;
int pref[1000001];
bool ok[1000001];
char s[1000001];
int main(){
    freopen ("prefix.in","r",stdin);
    freopen ("prefix.out","w",stdout);
    int n,t,i,k;
    scanf ("%d/n",&t);
    for(;t>0;t--){
        scanf ("%s\n",&s);
        n=strlen(s);
        for(i=n;i>0;i--) s[i]=s[i-1];
        pref[1]=0;
        ok[1]=false;
        for(i=2;i<=n;i++){
            k=pref[i-1];
            while(k>0 &&s[k+1]!=s[i])
                k=pref[k];
            if (s[k+1]==s[i]) k++;
            pref[i]=k;
            if (pref[i]!=0 &&i%(i-pref[i])==0) ok[i]=true;
            else ok[i]=false;
        }
        for(i=n;i>0 &&ok[i]==false;) i--;
        printf ("%d\n",i);

        for(i=1;i<=n;i++) ok[i]=false;
    }
    return 0;
}