Cod sursa(job #953060)

Utilizator primulDarie Sergiu primul Data 24 mai 2013 18:36:53
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#include <cstring>
#define In "prefix.in"
#define Out "prefix.out"
#define maxsize 1000010
using namespace std;
char s[maxsize];
int pi[maxsize];
ofstream g(Out);
inline int Prefix()
{
    int i,k,n;
    pi[1]  = 0;
    k = 0;
    n = strlen(s+1);
    for(i=2;i<=n;i++)
    {
        while(k && s[k+1]!=s[i])
            k = pi[k];
        if(s[k+1]==s[i])
            k++;
        pi[i]  = k;
    }
    for(i=n;i;i--)
        if(pi[i]&& i%(i-pi[i])==0)
            return i;
    return 0;
}
int main()
{
    int T;
    ifstream f(In);
    f>>T;
    while(T--)
    {
        f>>(s+1);
        g<<Prefix()<<"\n";
    }
    f.close();
    g.close();
    return 0;
}