Cod sursa(job #1169788)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 12 aprilie 2014 00:51:42
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <fstream>
#include <cstring>
using namespace std;
int T;
char S[1000012];
int pi[1000012],N,i,k;
ifstream f("prefix.in");
ofstream g("prefix.out");
int solve()
{
    int N=strlen(S+1);
    memset(pi,0,sizeof(pi));
    int k=0,i;
    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>=2;i--)
        if (pi[i] && i%(i-pi[i])==0 && (i-p[i])) return i;
    return 0;
}
int main()
{
    f>>T;
    f.get();
    while(T--)
    {
    f.get(S+1,1000011);
    f.get();
    g<<solve()<<'\n';
    }
    f.close();
    g.close();
    return 0;
}