Cod sursa(job #1169784)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 12 aprilie 2014 00:38:13
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <fstream>
#include <cstring>
using namespace std;
int T;
char S[1000002];
int pi[1000002],N,i,k;
ifstream f("prefix.in");
ofstream g("prefix.out");
int main()
{
    f>>T;
    f.get();
    while(T--)
    {
    f.get(S+1,1000001);
    f.get();
    N=strlen(S+1);
    pi[1]=k=0;
    for (i=2;i<=N;i++)
      {
          if ((k>0) && S[k+1]!=S[i]) k=pi[k];
          if (S[k+1]==S[i]) k++;
          pi[i]=k;
      }
    for (i=N;i>=1;i--)
        if (pi[i] && i%(i-pi[i])==0) {g<<i<<'\n';break;}
    if (i==0) g<<"0"<<'\n';
    }
    f.close();
    g.close();
    return 0;
}