Cod sursa(job #579084)

Utilizator dacyanMujdar Dacian dacyan Data 11 aprilie 2011 20:37:30
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 1100001
using namespace std;

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

char cuv[DIM];
int t;
int sol;
int KMP();

int main()
{
	fin >> t;
	while (t--)
	{
		fin >> cuv + 1;
		fout << KMP() << '\n';
	}
	fin.close();
	fout.close();
	return 0;
}

int KMP()
{
	int k(0), sol(0);
	int n = strlen(cuv+1);
	vector<int> pi(n+1);
	pi[1] = 0;
	for (int i = 2; i <= n; ++i)
	{
		while (k > 0 && cuv[k+1] != cuv[i])
			k = pi[k];
		if (cuv[k+1] == cuv[i])
			k++;
		pi[i] = k;
		
		if (k != 0 && i % (i-k) == 0) sol = i;
	}
	return sol;
}