Cod sursa(job #1492150)

Utilizator enedumitruene dumitru enedumitru Data 27 septembrie 2015 08:32:51
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.53 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("prefix.in"); ofstream g("prefix.out");
const int nmax = 1000004;
int t,d[nmax];
char p[nmax];
void Solve()
{   f>>(p+1);
    int n=strlen(p+1);
    for(int i=2,k=0; i<=n; ++i)
    {   while (k && p[k+1] != p[i]) k=d[k];
        if(p[k+1]==p[i]) ++k;
        d[i]=k;
    }
    for(int i=n; i; --i)
        if(d[i] && i % (i-d[i])==0) {g<<i<<'\n'; return;}
    g<<"0\n";
}

int main()
{   f>>t;
    while(t--) Solve();
    g.close(); return 0;
}