Cod sursa(job #1849255)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 17 ianuarie 2017 10:50:16
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  N 1000100

using namespace std;

int len ;
char sir [ N ];
int pi [ N ];

void failure( ){
    static int k , i ;

    pi [ 0 ] = -1;
    k = -1 ;

    for ( i = 0 ; i < len ; ){
        while ( k >=0 && sir [ i ] != sir[ k ] ){
            k = pi [ k ] ;
        }

        k ++ ;
        i ++ ;

        pi [ i ] = k ;

    }

}


int main(){
    int T , i , val ;
    int spy ;

    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);

    scanf("%d",&T);


    while ( T-- ){
        scanf("%s",sir);
        len = strlen ( sir );

        failure();

        spy = 0;
        for ( i = len  ; i > 0 ; i -- ){
            val = pi [ i ];

            if( i % ( i - val ) == 0  && val != 0 ){
                printf("%d\n",i );
                spy = 1;
                break ;
            }
        }
        if ( spy == 0 ){
            printf( "0\n");
        }

    }

    return 0;
}