Cod sursa(job #7520)

Utilizator GabiAlb Gabriel Gabi Data 21 ianuarie 2007 16:43:49
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;

int p[1000001];

void prefix(char s[])
{
	int i, k, n;
	
    p[1] = 0; 
    k = 0; 
    n = strlen(s);
	
    for (i = 1; i < n; i++)
	{
  		while ( k > 0 && s[k] != s[i] )
  			k =  p[k];

  		if ( s[k] == s[i] ) k++;

  		p[i+1] = k;
  	}
}

int main()
{
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    
    int T;
    fin >> T;
    fin.get();
    while (T--)
    {
        int n;
        char a[1000001];
        fin.getline(a, 1000001);
        
        n = strlen(a);
        prefix(a);
    
        int k = 0;
        for (int i = n; i >= 1; i--)
            if (p[i] > 0 && (i % (i - p[i]) == 0)) { k = i; break; }
        
        fout << k << "\n";
    }
    
    fin.close();
    fout.close();
    return 0;
}