Cod sursa(job #1642863)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 9 martie 2016 16:36:49
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<iostream>
#include<stack>
#include<deque>
#include<queue>
#include<string>
#include<vector>
#include<algorithm>
#include<fstream>
#include<string.h>
#include<stdio.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int NMAX = 1000005;
char s[NMAX];
int N,poz[NMAX],M;


void init()
{

    for(int i = 1 ; i <= M ; ++i)
        poz[i] = 0;
}

int solve()
{

    int k = 0,ret =0;
    poz[1] = 0;
    for(int i = 2 ; i <= M ; ++i){
        while(k && s[k + 1] != s[i])
            k = poz[k];
        if(s[k+1] == s[i])
            ++k;
        poz[i] = k;
        if( poz[i] % (i - poz[i]) == 0 && poz[i] *2 >= i)
            ret = i;
    }
    return ret;
}

int main()
{

    in>>N;
    for( ; N ; --N){
        in.getline(s + 1,NMAX);
        M = strlen(s + 1);
        init();
        out<<solve()<<"\n";
    }
    in.close();
    out.close();
    return 0;
}