Cod sursa(job #568625)

Utilizator david_raucaRauca Ioan David david_rauca Data 31 martie 2011 15:33:34
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<vector>
using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

char A[1000001];

int t;

void Read();
void KMP();

int main()
{
    Read();
    
    fin.close();
    fout.close();
    
    return 0;
}

void Read()
{
     fin >> t;
     for( int i = 1; i <= t; ++i )
     {
          fin >> A+1;
          KMP();
     }
}

void KMP()
{
     int n = strlen(A+1);
     vector<int> T(n+1);
     T[1] = 0;
     int pos = 0;
     int lungime = 0;
     for( int i = 2; i <= n; ++i )
     {
          while( pos > 0 && A[pos+1] != A[i] )
                 pos = T[pos];
          if( A[pos+1] == A[i] )
              pos++;
          T[i] = pos;
          if( T[i] != 0 && i%(i-T[i]) == 0)
              lungime = i;
     }
     fout << lungime << '\n';
}