Cod sursa(job #197343)

Utilizator coderninuHasna Robert coderninu Data 3 iulie 2008 18:53:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.57 kb
#include <fstream>
#include <string>
#include <vector>

using namespace std;

fstream fin("prefix.in", ios :: in), fout("prefix.out", ios :: out);
string s;
vector< int > p;
int T, i, j, rez;

int main()
{
	for (fin >> T; T; --T)
	{
		fin >> s;
		p.assign(s.size()+1,0);
		for (i = 1, j = -1, p[0] = -1; i < s.size(); ++i)
		{
			while ( j>=0 && s[j+1] != s[i])
				j = p[j];
			if (s[j+1] == s[i]) ++j;
			p[i] = j;
		}
		for (i = 1, rez = 0; i<s.size(); ++i)
			if (i - p[i] <= ((i+1) >> 1) )
				if (!((i+1) % (i - p[i])))
					rez = i+1;
		fout << rez << endl;
	}
	return 0;
}